循环 jQuery ajax 并传递参数的正确方法

Osk*_*ura 0 javascript jquery loops

我想一次性解决循环ajax请求并将“索引”传递给它的所有问题(下面的问题):

for (var index = 0; index < 4; index++) {
    $.ajax({
        url: 'http://graph.facebook.com/',
        dataType: 'jsonp',
        success: function(json) {
            console.log(json[index]);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中,每个“成功”回调中的“索引”将是 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);
}
Run Code Online (Sandbox Code Playgroud)

在我看来,什么是一个巨大的错误 - 如果当时没有请求怎么办?比 'json' 变量将是 'undefined'。

你们有没有人有一些正确的方法来解决这个问题?

Sil*_*ind 5

实际上 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);
}
Run Code Online (Sandbox Code Playgroud)

...你也可以这样写:

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);
}
Run Code Online (Sandbox Code Playgroud)

正如您可能已经看到的那样,这两个变量中的任何一个在函数内部定义时如何通过另一个调用进行更改?

(旁注:我认为这样看起来更干净)