Javascript Ajax已完成调用如何通过副本传递变量
这是我的密码:Javascript Ajax已完成调用如何通过副本传递变量,javascript,ajax,Javascript,Ajax,这是我的密码: for (var i = 0; i < list.length; i++) { $.when( $.ajax({url: "./dorequest.php?id=" + list[i], success: function(response){ jsonFriendlist = response; }}) ).done( function(jsonFriendlist) { var friendList
for (var i = 0; i < list.length; i++) {
$.when(
$.ajax({url: "./dorequest.php?id=" + list[i],
success: function(response){ jsonFriendlist = response; }}) ).done(
function(jsonFriendlist) {
var friendListObject = JSON.parse(jsonFriendlist);
if (!jQuery.isEmptyObject(friendListObject)) {
var rawListFriend = friendListObject.friendslist.friends;
for (var j = 0; j < rawListFriend.length; j++) {
console.log(i);
playerLinkList[i].listFriends.push(rawListFriend[j].id);
}
}
}
);
for(变量i=0;i
}
基本上,我尝试更新数组列表中对象的一部分,通过该数组中的项目I发送请求。但是代码失败了,因为我用i=13(即list.lenght
)完成了对“done”函数的每次调用。
我的理解是,由于发送请求和检索结果需要时间,并且在调用done函数时是异步完成的,因此主线程已经超出了
的,因此i=13
我的问题是,在发送ajax请求时,如何通过副本传递来“冻结”I
谢谢,使用闭包解决了这个问题
for (var i = 0; i < playerIds.length; i++) {
// Pass the parameter "i" to the done functions
(function(index) {
var dfd = $.ajax({url: "./dorequest.php?id=" + playerIds[i] + "&requesttype=friendlist",
success: function(response){ jsonFriendlist = response; }});
dfd.done(
function(jsonFriendlist) {
var friendListObject = JSON.parse(jsonFriendlist);
if (!jQuery.isEmptyObject(friendListObject)) {
var rawListFriend = friendListObject.friendslist.friends;
for (var j = 0; j < rawListFriend.length; j++) {
playerLinkList[index].listFriends.push(rawListFriend[j].steamid);
}
}
}
);
})(i);
}
for(变量i=0;i