2011-09-28 283 views
3

我一直在使用AJAX一段時間,但以有限和簡單的方式。我使用JQueryAJAX異步響應回調

目前我正在調試一個Web應用程序。客戶端代碼使用JavaScript和JQuery。我注意到,在這個應用程序中,可以同時發送多個AJAX請求(一個接一個地發送)。我擔心的是,因爲AJAX是異步的,AJAX請求可能無法按正確的順序完成。我回呼功能在FIFO方式執行第一想知道,如果適當的AJAX回調將巫不分響應的執行被退貨或

讓我解釋

我有2個AJAX請求A和B的一和B有自己的回叫功能。應用程序首先發出請求A,然後立即發出請求B.現在,應用程序期望A首先返回。現在我的問題是如果B首先返回什麼。哪個回叫將被執行?

我做了一些研究,並找不到關於此問題的任何信息。所以我認爲瀏覽器會協調回調。爲了確保我寫了一個小測試。我的測試表明,無論首先返回哪個響應,總是首先使用第一個請求回調。

我的問題是什麼是行爲?還有什麼技術或方法用於避免這種情況。

回答

4

看看jQuery承諾/延期對象,它們允許你控制這個確切的行爲。

$.when($.ajax("test.aspx")).then($.ajax("test2.aspx")); 

http://api.jquery.com/category/deferred-object/

+0

+1,這是偉大的東西。更多文檔:http://api.jquery.com/jQuery.when/ –

+0

http://www.erichynds.com/jquery/using-deferreds-in-jquery/ – BNL

2

如你所描述的流 - 如果請求B首先返回,那麼它的回調將被首先調用。

您可以隨時撥打第二個AJAX請求時,第一個suceed,例如:

function callbackA() { return true; } 
function callbackB() { return true; } 

$.ajax({url: '/my/url', data: {mydata: mydata}, success: function(data) { 
     callbackA(data); 
     $.ajax({url: '/my/url2', data: {mydata2: mydata2}, success: function(data) {} 
      callbackB(data); 
    }); 
}); 
+0

第二個想法是,這可能是最直接的解決方案。 –