【问题标题】:Do While Loop for AJAX?为 AJAX 做 While 循环吗?
【发布时间】:2015-12-04 21:10:20
【问题描述】:

我正在尝试将 ajax 请求循环 10 次。我注意到一些奇怪的错误,例如 int 是 10、10 次。我搜索并发现它与 AJAX 异步有关。我想要一些东西等到 ajax 请求完成然后继续。

提前致谢。

do{
    var int=0;
    $.ajax({...},
        success:function(response){ int++; },
    });
    alert(int);
}while(int<10);

【问题讨论】:

  • 将警报移动到成功函数中是否符合您想要的行为?
  • ajax 根据定义是异步的。让它等待会破坏它的目的。 jquery when 是一个更好的选择。 api.jquery.com/jQuery.when
  • @anu ajax 并不总是异步的。是的,ajax 的主要用法是异步,但你仍然可以在你的 ajax 请求中输入async: false

标签: javascript jquery ajax loops asynchronous


【解决方案1】:

如果您的 success 处理程序指的是 int,那么是的,到它运行时,int 将始终为 0,因为循环完成后很长时间。

如果您真的希望调用连续运行,每次使用不同的值,请将调用移动到一个函数,并根据需要从 ajax 成功处理程序调用它:

function myAjax(int) {
  if (int >= 10)
    return;

  $.ajax({   //...
     success:function(response){ 
       int++;
       // whatever we need to do with int and the response

       myAjax(int);
     }
  });
}

myAjax(0);

【讨论】:

    【解决方案2】:

    您可以将参数async: false设置为ajax对象。

    $.ajax({
            url: $(this).attr('href'),
            type: 'GET',
            async: false,
            error: function(){
                return true;
            },
            success: function(msg){
            }
        });
    

    【讨论】:

      【解决方案3】:

      我相信这是您正在寻找的代码:

      for (var int = 0; int < 10; int++) {
          (function (int) {
              $.ajax({
                  url : 'process.php',
                  success : function() {
                      alert("TEST");
                  }
              });
          })(int);
      }
      

      以下是一些链接,其中包含有关其工作原理的更多信息: jQuery AJAX calls in for loop [duplicate] JavaScript closure inside loops – simple practical example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多