0

我想每 1 分钟后进行一次 ajax 调用,但只有在前面的 ajax 调用完成后才能进行后续调用。例如,ajax 调用 2 应仅在 ajax 调用 1 完成后进行。我知道如何使用 setInterval 使函数每 1 分钟执行一次。提前致谢

4

4 回答 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 回答