我想每 1 分钟后进行一次 ajax 调用,但只有在前面的 ajax 调用完成后才能进行后续调用。例如,ajax 调用 2 应仅在 ajax 调用 1 完成后进行。我知道如何使用 setInterval 使函数每 1 分钟执行一次。提前致谢
问问题
298 次
4 回答
2
尝试这样的事情:
(function repeatAjaxCall() {
$.ajax({
url: "example-url.com",
complete: function() {
setTimeout(repeatAjaxCall, 60000)
}
});
})();
于 2012-08-10T03:34:02.450 回答
1
你看过 Underscore js debounce 功能吗?
http://underscorejs.org/#debounce
基本上,这些允许您调用函数的“去抖动”版本,直到自上次调用以来的 x 毫秒数后才会调用该函数。
这将允许您执行以下操作:
var update = _.debounce(function() {
// do some ajax stuff here
}, 300);
setTimeout(update, 1000);
于 2012-08-10T03:35:08.223 回答
1
function ajaxCall(){
setTimeout(function(){
$.get( url, function(data){
// do stuff
ajaxCall();
})
}, 60000)
}
于 2012-08-10T03:37:32.980 回答
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)
},
于 2012-08-10T03:54:27.333 回答