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

时间:2013-12-17 08:06:34

标签: javascript jquery loops

我想解决所有循环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'变量将是'undefined'。

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

1 个答案:

答案 0 :(得分:4)

实际上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);
}

正如您可能已经看到的那样,当这两个变量在函数内定义时,这两个变量中的任何一个如何通过另一个调用进行更改?
(旁注:我认为它实际上看起来更干净)