2013-02-16 42 views
0

我對jQuery中調用jax調用的函數的執行方式有疑問。函數jQuery手機中包含ajax的執行順序

考慮兩個功能。

function auth() { 
    $.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: API_URL, 
     data: {.... 
     }, 
     success: function (response) {} 
    }); 
}; 

function getData() { 
    $.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: API_URL, 
     data: {.... 
     }, 
     success: function (response) {} 
    }); 
}; 

和我打電話等,如下所示後,這些功能中的一個......

auth(); 
getData(); 

我的情況,我想只有在完成「AUTH()」後執行getData()。我知道我們可以調用getData()內部auth的成功功能。但是我想知道的是,如果我將這些函數稱爲一個接一個,那麼這些函數將如何執行,就像我上面顯示的那樣。

任何形式的幫助,將不勝感激:) 謝謝。

回答

0

它們將異步執行。您可以通過在呼叫中設置「async = false」,讓他們等待(同步),如果這是您想要的。

function auth() { 
    $.ajax({ 
     **async: false,** 
     type: "POST", 
     dataType: "json", 
     url: API_URL, 
     data: {.... 
     }, 
     success: function (response) {} 
    }); 
}; 

function getData() { 
    $.ajax({ 
     **aysnc: false,** 
     type: "POST", 
     dataType: "json", 
     url: API_URL, 
     data: {.... 
     }, 
     success: function (response) {} 
    }); 
}; 

這將使得呼叫完成上移動到下一個電話之前,但使得呼叫時通常會鎖定瀏覽器:

異步(默認值:true) 類型 :Boolean默認情況下,所有請求都是異步發送的(即,默認情況下,它被設置爲true)。如果您需要同步請求,請將此選項設置爲false。跨域請求和dataType:「jsonp」請求不支持同步操作。 請注意,同步請求可能會暫時鎖定瀏覽器,並在請求處於活動狀態時禁用任何操作。從jQuery 1.8開始,不贊成使用帶有jqXHR($ .Deferred)的async:false;您必須使用成功/錯誤/完整回調選項,而不是jqXHR對象的相應方法,例如jqXHR.done()或已棄用的jqXHR.success()。

的Src JQM網站:http://api.jquery.com/jQuery.ajax/

+0

感謝您的幫助,感謝您爲編寫此類詳細回覆而付出的努力。它幫助了我。 :) – 2013-02-16 06:12:00

+0

很高興幫助:) – Red2678 2013-02-16 06:14:52

1

您可以在jQuery中使用deferred objects。只需返回ajax()結果。

function auth() { 
    return $.ajax({ 
     type: "POST", 
     dataType : "json", 
     url: API_URL, 
     data: { .... }, 
     success: function (response) { 
     } 
    });    
}; 

auth.done(getData); 

這將調用getDataauth完成。

+0

感謝您的回覆:),我認爲這將解決。除此之外,如果我一個接一個地打電話,這些功能將如何得到執行?即;第二個函數是否會等待第一個函數的ajax請求被強制? – 2013-02-16 05:33:47

+0

第二個函數只有在第一個Ajax請求成功時纔會執行。 – Aesthete 2013-02-16 06:57:55