我想一次性解决循环ajax请求并将“index”传递给它的问题(下面的问题):
for (var index = 0; index < 4; index++) {
$.ajax({
url: 'http://graph.facebook.com/',
dataType: 'jsonp',
success: function(json) {
console.log(json[index]);
}
});
}
在此代码中,每个“成功”回调“索引”将为 3。但我想用 0、1、2、3 调用回调。许多人将 ajax 请求放在闭包中:
for (var index = 0; index < 4; index++) {
(function(index){$.ajax({
url: 'http://graph.facebook.com/',
dataType: 'jsonp',
success: function(json) {
console.log(json[index]);
}
});
})(index);
}
在我看来这是一个巨大的错误 - 如果请求当时不存在怎么办?比“json”变量将是“未定义”。
你们中有人有解决这个问题的正确方法吗?
最佳答案
实际上 JSON 不会是未定义的。
如果你将下面的代码拆开,它会变得更加清晰:
所以代替这个:
for (var index = 0; index < 4; index++) {
(function(index){$.ajax({
url: 'http://graph.facebook.com/',
dataType: 'jsonp',
success: function(json) {
console.log(json[index]);
}
});
})(index);
}
...你也可以这样写:
function myFunction(index) {
$.ajax({
url: 'http://graph.facebook.com/',
dataType: 'jsonp',
success: function(json) {
console.log(json[index]);
}
});
}
// and call it like this
for (var index = 0; index < 4; index++) {
myFunction(index);
}
正如您可能已经看到的,当这两个变量在函数内部定义时,它们将如何被另一个调用更改?
(旁注:我认为这样实际上看起来更干净)
关于javascript - 循环 jQuery ajax 并传递参数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628926/