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

标签 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”变量将是“未定义”。

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

最佳答案

实际上 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/

相关文章:

javascript - 增加随机化的权重

javascript - 如何清除文件输入而不丢失事件监听器和扩展属性?

jquery - 使用固定标题滚动表格时出现问题。在拐 Angular 处,标题让位于对齐方式

php - fatal error : Cannot use string offset as an array?

javascript - 检测数组中两个 Sprite 的碰撞? JavaScript

javascript - 如何处理 svg 中的 <path> 笔划宽度变为零

javascript - 有人有将 Visualize.js 嵌入 APEX 应用程序以集成 JasperServer Reports 的经验吗?

javascript - 如何在 $(document).ready 之前将 jQuery.js 包含在自己的 .js 中?

ruby - For循环...永远

c++ - 如何在此代码中仅显示素数?