如何在无限循环内调用Ajax函数

bSr*_*bSr 0 javascript ajax

谁能告诉我如何在无限循环中运行Ajax函数?

while(true){
    $.ajax({
         type: 'POST',
         data: {'constraintId': experimentId},
         url: '/calender-generation-status/',
         success: function(data){
              console.log("inside ajax");
     }
  });
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是while循环在成功attr之前保持运行,并且成功attr之后的所有语句都没有被执行.

T.J*_*der 5

Websockets可能是你正在做的更好的方法,当然,如果不了解更多,就不可能说.不断地向服务器发出XHR调用对于两端来说都是很多工作.

但重新提出问题:要实现循环,根本不使用循环; 相反,你从complete回调开始下一个调用:

function doAjax() {
    $.ajax({
         type: 'POST',
         data: {'constraintId': experimentId},
         url: '/calender-generation-status/',
         success: function(data){
              console.log("inside ajax");
         },
         complete: doAjax   // <===
    });
}
Run Code Online (Sandbox Code Playgroud)

或更好:

function doAjax() {
    var stop = false;
    doCall();
    return {
        stop: function() {
            stop = true;
        }
    };
    function doCall() {
        $.ajax({
             type: 'POST',
             data: {'constraintId': experimentId},
             url: '/calender-generation-status/',
             success: function(data){
                  console.log("inside ajax");
             },
             complete: function() {
                 if (!stop) {
                     doCall();
                 }
             }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

... 使用可用于停止进程doAjaxstop方法将对象返回给调用者.