Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环jQueryAjax并传递参数的正确方法_Javascript_Jquery_Loops - Fatal编程技术网

Javascript 循环jQueryAjax并传递参数的正确方法

Javascript 循环jQueryAjax并传递参数的正确方法,javascript,jquery,loops,Javascript,Jquery,Loops,我想一次性解决循环ajax请求并向其中传递“索引”的问题(以下问题): for(var索引=0;索引

我想一次性解决循环ajax请求并向其中传递“索引”的问题(以下问题):

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
中从来没有未定义的函数。所以我认为结束是个好主意。