繁体   English   中英

在for循环中进行多个ajax调用

[英]making multiple ajax calls within a for loop

我是 javascript 的相对新手,我正在尝试在 for 循环中进行多个 ajax 调用。 每次遍历循环时,它都会使用不同的 url 为 ajax 调用循环遍历数组的元素。 问题是变量“test”的值总是等于“condition4”。 我已经习惯了其他语言,其中 'test' 的值是“condition1”,然后是“condition2”等,因为它通过 for 循环。 这是我的代码的简化版本:

var myData = [];
var cnt = 0;
var link;
var myCounter = 0;
var myArray = ["condition1", "condition2", "condition3", "condition4"];

for (x = 0; x < myArray.length; x++) {
    link = "https://test.com/" + myArray[x];
    myCounter = x;
    GetJSON(function (results) {
        for (i = 0; i < results.data.length; i++) {
            var id = results.data[i].identifier;
            var test = myArray[myCounter];
            myData[cnt] = { "id": id, "test": test };
            cnt++;
        }
    });
}

function GetJSON(callback) {
    $.ajax({
        url: link,
        type: 'GET',
        dataType: 'json',
        success: function (results) {
            callback(results);
        }
    });
}

我认为您可以通过向服务器发送和接收 myCounter 值来解决此问题

 for (x = 0; x < myArray.length; x++) { link = "https://test.com/" + myArray[x]; myCounter = x; $.ajax({ url: link, type: 'GET', dataType: 'json', data: { myCounter: myCounter} success: function(results) { for (i = 0; i < results.data.length; i++) { var id = results.data[i].identifier; var test = results.data[i].myCounter myData[cnt] = { "id": id, "test": test }; cnt++; } } }); }

当您执行循环时,它会附加myCounter引用。 然后,由于异步任务,当它完成并调用'myCounter'时,它已经达到了数字4。所以,当它调用'myCounter'时,它是4。为了隔离作用域,您需要创建一个新作用域每次迭代并隔离“myCounter”的每个值

 for (x = 0; x < myArray.length; x++) { link = "https://test.com/" + myArray[x]; myCounter = x; //IIFE (function() { var ownCounter = myCounter; //Isolating counter GetJSON(function (results) { for (i = 0; i < results.data.length; i++) { var id = results.data[i].identifier; var test = myArray[ownCounter]; myData[cnt] = { "id": id, "test": test }; cnt++; } }); })(); }

或者...

 for (let x = 0; x < myArray.length; x++) { link = "https://test.com/" + myArray[x]; myCounter = x; GetJSON(function (results) { for (i = 0; i < results.data.length; i++) { var id = results.data[i].identifier; var test = myArray[x]; myData[cnt] = { "id": id, "test": test }; cnt++; } }); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM