2012-08-10 63 views
0

我想在每1分鐘後進行ajax調用,但只有在先前的ajax調用完成後才能進行後續調用。例如,ajax調用2只應在ajax調用1完成後才能進行。 我知道如何使用setInterval每1分鐘執行一次函數。 由於事先ajax與jquery調用

+0

whathaveyoutried.com – Lance 2012-08-10 03:32:16

回答

2

嘗試這樣:

(function repeatAjaxCall() { 
    $.ajax({ 
     url: "example-url.com", 
     complete: function() { 
      setTimeout(repeatAjaxCall, 60000) 
     } 
    }); 
})(); 
+0

如何測試這個功能來檢查它的工作原理? – rockstar 2012-08-10 03:36:30

+0

@PradipChitrakar - 使用Firebug的網絡監控工具。 – jeff 2012-08-10 03:37:54

1

您拍照時看看下劃線JS防抖動功能?

http://underscorejs.org/#debounce

基本上,這些讓你調用不會被調用,直到自上次調用毫秒x個功能是「去抖」的版本。

這將允許你做這樣的事情:當你說

var update = _.debounce(function() { 
    // do some ajax stuff here 
}, 300); 
setTimeout(update, 1000); 
1
function ajaxCall(){ 
    setTimeout(function(){ 
     $.get(url, function(data){ 
     // do stuff 
     ajaxCall(); 
     }) 
    }, 60000) 
} 
1

。如果下一個電話會在前一個電話完成時觸發。而前一個可以延遲超過1分鐘。讓我們起來,2分鐘。所以下一個會在2分鐘內至少被叫到。所以知道這一點。沒關係,一分鐘也不會工作,對吧?

那麼爲什麼不在最後一個完成時調用下一個ajax,而不是在一分鐘後分鍾激活它?使用完整的方法:

$.ajax({ 
    url: 'file', 
    type: 'POST', 
    data: {}, 
    complete: function(xhr, textStatus) { 

    //CALL HERE THE NEXT AJAX 

}, 

或者,如果想要完成一前一後給1分鐘的時間:

$.ajax({ 
    url: 'file', 
    type: 'POST', 
    data: {}, 
    complete: function(xhr, textStatus) { 

    setTimeout(function(){ 
     //CALL HERE THE NEXT AJAX 
    }, 1000) 

}, 
+0

應該是60000而不是1000 – 2012-08-10 03:55:22

+0

我有一個ajax函數,它可以獲取用戶未讀取的消息數量或從數據庫中讀取新消息的數量。所以我想每1分鐘打一次ajax來檢查新的消息。但是如果最後的ajax調用需要超過1分鐘的時間才能完成,那麼由於ajax調用是異步的,我將會有另一個ajax調用。所以ajax調用會有1分鐘的間隔執行,並且最後的ajax調用應該完成,如果不等待它完成的話。 – rockstar 2012-08-10 05:58:45

+0

明白了。我的第二個想法是在ajax完成後使用setTimeout並不適合你的場景? – 2012-08-10 06:03:55