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

时间:2018-06-21 06:37:47

标签: javascript ajax

有人可以告诉我如何在无限while循环内运行Ajax函数吗?

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

此代码的问题是while循环在成功attr之前一直运行,而成功attr之后的所有语句都没有执行。

1 个答案:

答案 0 :(得分: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   // <===
    });
}

或更好:

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();
                 }
             }
        });
    }
}

...使用doAjax方法将对象返回给stop的调用者,该方法可用于停止进程。