2015-09-01 97 views
0

我很難知道何時完成所有Ajax請求,因爲我需要此信息來調用另一個函數。 很難知道什麼時候我的4/5函數完成了請求。我使用ajax的本地功能,沒有一個爲我工作。 我使用了Chrome和異步請求。Ajax - 所有請求已完成/已完成

有人幫助我

我用這個(沒有工作):

$(document).ajaxStop(function() { 
    alert("Completed"); 
}); 

這個(無效):

$(document).ajaxComplete(function() { alert("Completed"); }); 

兩個方面,我嘗試在其他功能塔爾調用使用所有請求: 例如:

function Init() 
{ Search("123"); Search2("1234"); Search3("12345"); 
... } 

提取一個(5所請求的,其他都是很相似),我的要求:

function Search(user) { 
    $.ajax({ 
     url: 'www.example.com/' + user, 
     type: 'GET', 
     async: true, 
     dataType: 'JSONP', 
     success: function(response, textStatus, jqXHR) { 
      try { 
       if (response != null) { 
        alert("Have Data"); 
       } else { 
        alert("are empty"); 
       } 
      } catch (err) { 
       alert("error"); 
      } 
     }, 
     error: function() { 
      alert("error"); 
     } 
}); } 

有人幫助我嗎? 感謝

+0

上面的工作是類似的問題,根據文檔跨域請求不執行錯誤函數? – JackCColeman

回答

1

您可以創建自定義觸發

$(document).trigger('ajaxDone') 

,並調用它當過你做完Ajax請求。

然後你就可以聽它

$(document).on('ajaxDone', function() { 
//Do something 
}) 

如果你想跟蹤多個AJAX的調用,您可以設置計數許多「完成」值是如何傳遞給它的功能,一旦所有人都完成,你可以開始活動。

將此函數的調用放在ajax調用的每個'success'和'error'事件中。

更新: 您可以創建像這樣

var completedRequests= 0 
function countAjax() { 
    completedRequests+=1 
    if(completedRequests==whatEverNumberOfRequestsYouNeed) { 
      $(document).trigger('ajaxDone'); 
    }  
} 

呼籲所有的成功和錯誤事件,此功能的作用。 然後,只有在一定數量的請求後纔會觸發ajaxDone事件。

如果你想跟蹤特定的ajax請求,你可以添加一個變量到countAjax來檢查哪個ajax完成。

+0

嗨,謝謝你的回覆。你建議我在事件「成功」或「錯誤」上放置觸發器「$(document).trigger('ajaxDone')」並計算完成請求的次數是多少? 我該如何計算這個?在「//做某事」做「如果」計數等於號碼請求完成? 對不起,但我是新編程語言。 謝謝 – fipcurren88

+0

更新了我的答案 –

2

你有沒有嘗試把它放在一個完成功能?像...

$.ajax({ 
     url: 'www.example.com/' + user, 
     type: 'GET', 
     async: true, 
     dataType: 'JSONP' 
    }).done(function (data) { 
     code to execute when request is finished; 
    }).fail(function() { 
     code to do in event of failure 
    }); 

反彈邁克爾·Seltenreich說,他的解決辦法,如果我理解你的傢伙用這是怎麼回事......可能看起來像:

var count = 0; 

function checkCount(){ 
if(count == 5){ 
    //do this, or fire some other function 
} 
} 
#request one 
$.ajax({ 
     url: 'www.example.com/' + user, 
     type: 'GET', 
     async: true, 
     dataType: 'JSONP', 
    }).done(function(data){ 
     count += 1 
     checkCount() 
     }) 

#request two 
$.ajax({ 
     url: 'www.example.com/' + user, 
     type: 'GET', 
     async: true, 
     dataType: 'JSONP', 
    }).done(function(data){ 
     count += 1 
     checkCount() 
     }) 

並做到這一點與你的五個要求。如果這對你有用,請務必將他的問題標記爲答案;)

+0

嗨,我在互聯網上看到這個解決方案,但問題是當我有很多請求asyncronous。 謝謝 – fipcurren88

+0

我更新了答案,向您展示了基於Michael Seltenreich解決方案的一種方法,因爲您不確定如何實現他的想法。如果他回到這個主題,他可能會有更好的實現。無論哪種方式,如果這樣做,確保你標記他的答案是正確的,因爲這是他的解決方案。 – HolyMoly