Javascript 循环jQueryAjax并传递参数的正确方法
我想一次性解决循环ajax请求并向其中传递“索引”的问题(以下问题):Javascript 循环jQueryAjax并传递参数的正确方法,javascript,jquery,loops,Javascript,Jquery,Loops,我想一次性解决循环ajax请求并向其中传递“索引”的问题(以下问题): for(var索引=0;索引
for(var索引=0;索引<4;索引++){
$.ajax({
网址:'http://graph.facebook.com/',
数据类型:“jsonp”,
成功:函数(json){
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);
}
for(var索引=0;索引<4;索引++){
(函数(索引){$.ajax({
网址:'http://graph.facebook.com/',
数据类型:“jsonp”,
成功:函数(json){
log(json[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);
}
for(var索引=0;索引<4;索引++){
(函数(索引){$.ajax({
网址:'http://graph.facebook.com/',
数据类型:“jsonp”,
成功:函数(json){
log(json[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);
}
函数myFunction(索引){
$.ajax({
网址:'http://graph.facebook.com/',
数据类型:“jsonp”,
成功:函数(json){
log(json[index]);
}
});
}
//这样称呼它
对于(var指数=0;指数<4;指数++){
myFunction(索引);
}
正如您可能已经看到的,当这两个变量在函数中定义时,它们中的任何一个如何通过另一个调用进行更改?(顺便说一句:我觉得这样看起来更干净)实际上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);
}
for(var索引=0;索引<4;索引++){
(函数(索引){$.ajax({
网址:'http://graph.facebook.com/',
数据类型:“jsonp”,
成功:函数(json){
log(json[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);
}
函数myFunction(索引){
$.ajax({
网址:'http://graph.facebook.com/',
数据类型:“jsonp”,
成功:函数(json){
log(json[index]);
}
});
}
//这样称呼它
对于(var指数=0;指数<4;指数++){
myFunction(索引);
}
正如您可能已经看到的,当这两个变量在函数中定义时,它们中的任何一个如何通过另一个调用进行更改?(旁注:我认为这样看起来更干净)这就是您需要的。我不明白为什么您认为闭包是一个糟糕的解决方案。因为它正在立即调用,并且没有等待数据响应。@OskarSzura,但数据是异步来的。@OskarSzura我不认为
json
变量将是未定义的,因为$.ajax
中的success
函数是一个回调函数,在ajax请求成功后将执行该函数,所以您可以确保json
中从来没有未定义的函数。因此,我认为使用闭包是一个好主意。这就是您需要的。我不明白为什么您认为闭包是一个糟糕的解决方案。因为它正在立即调用,并且没有等待数据响应。@OskarSzura,但数据是异步来的。@OskarSzura我不认为json
变量将未定义,因为$.ajax
中的success
函数是一个回调函数,在ajax请求成功后将执行该函数,所以您可以确保json
中从来没有未定义的函数。所以我认为结束是个好主意。