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デバウンス関数を見たことがありますか?

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を呼び出してみませんか?完全な方法を使用する:

$.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 に答える