2013-10-07 185 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錨標籤重定向鏈接]的