2013-10-07 152 views
1

我需要一个超链接来执行Ajax调用,并且完成后,请执行超链接的标准操作。

<a href="afterwards.html" target="_blank" onclick="return CallFirst();">Link</a> 

JavaScript函数调用$.ajax(),等待成功或失败,则返回true。

function CallFirst() 
{ 
    $deferred = $.ajax({ 
        type: "POST", 
        url: url, 
        data: data 
       }); 

    // **todo** WAIT until the Ajax call has responded. 

    // Return true, which makes the <a> tag do it's standard action 
    return true; 
} 

代码必须等待$.ajax成功,然后从CallFirst()返回true。

$deferred.when()立即终止。怎么能等待?

+1

可能重复(http://stackoverflow.com/questions/12500669/html-anchor-tag-redirect-link-after-ajax-request) – Liam

回答

7

只需设置async属性false

$deferred = $.ajax({ 
       type: "POST", 
       url: url, 
       data: data, 
       async: false 
      }); 

但它确实是一个好主意,用回调。

1

您可以设置异步为假,但更好的做法是使用回叫:

.done(function(success) { 
    if (success) { 
     doSomeThingElseNow(); 
    } 
    }); 
+0

即代码将立即终止,而不是等待。 – buffjape

0

使用构建AJAX回调从jQuery的。

$.ajax({ 
    url: '/path/to/file', 
    type: 'default GET (Other values: POST)', 
    dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)', 
    data: {param1: 'value1'}, 
}) 
.done(function() { 
    console.log("success"); 
}) 
.fail(function() { 
    console.log("error"); 
}) 
.always(function() { 
    console.log("complete"); 
}); 
[AJAX请求后HTML锚标签重定向链接]的