ajax成功的For循环问题

for loop issue with ajax success

本文关键字:循环 问题 For 成功 ajax      更新时间:2023-09-26

我在for循环中调用ajax函数。但我得到1内ajax成功。小提琴

function a(){
var myAr= [0];
    for(var i=0; i<myAr.length;i++){
                console.log(i +" a")
    var root = 'http://jsonplaceholder.typicode.com';
        $.ajax({
          url: root + '/users',
          method: 'GET'
        }).then(function(data) {
        console.log(i + " c")
        });
                console.log(i + " b")
    }
}
a()

.then()只在收到AJAX的响应时执行。

此时,i = 1,因为底边循环已经结束。

如果您想要AJAX请求创建时的原始值,您可以在i中创建一个本地作用域上的新变量。这样,在.then()方法内部执行的闭包具有原始值。

更新小提琴。

你必须使用闭包,否则它会计算到最后一次执行的值

 function a(){
var myAr= [0];
  for(var i=0; i<myAr.length;i++){
            console.log(i +" a")
    var root = 'http://jsonplaceholder.typicode.com';
    $.ajax({
      url: root + '/users',
      method: 'GET'
    }).then(function(i) {return function(data) {
    console.log(i + " c")
    }}(i));
            console.log(i + " b")
}
}
a()

根据您的代码,console.log(i + " c")仅在ajax调用完成时执行。对于这种功能,你必须以不同的方式触发它。

这是一个工作演示。

function a() {
   var myAr= [0, 2, 3];
   var startIndex = 0;
   var doAjaxCall = function(i) {
       console.log(i +" a");
       var root = 'http://jsonplaceholder.typicode.com';
        $.ajax({
          url: root + '/users',
          method: 'GET'
        }).then(function(data) {
            console.log(i + " c");
            if(i < (myAr.length - 1)) {
                i++;
                doAjaxCall(i);
            }
        });
   }
   doAjaxCall(startIndex);
}
a();