当前位置:  开发笔记 > 编程语言 > 正文

AJAX/getJSON中的jQuery范围或竞争条件

如何解决《AJAX/getJSON中的jQuery范围或竞争条件》经验,为你挑选了1个好方法。

我有一段jQuery代码,可以getJSON()快速连续调用几个调用:

var table = $("table#output");
for (var i in items) {
    var thisItem = items[i];
    $.getJSON("myService", { "itemID": thisItem }, function(json) {
        var str = "";
        str += "" + thisItem + "";
        str += "" + json.someMember + "";
        str += "";
        table.append(str);
    });
}

当我针对滞后服务器运行时,表会填充预期json.someMember值(它们按顺序到达:我不介意),但是thisItem列中填充了来自各种迭代的不可预测的值混合.

我假设这与范围和时间有关 - 回调函数是thisItem从更广泛的范围读取?我对吗?我该如何防止这种情况?

我目前的解决方法是让JSON服务返回其输入的副本 - 至少可以说是不满意的.



1> Crescent Fre..:

由于循环,似乎是一个范围问题.试试这个:

var table = $("table#output");
for (var i in items) {
    var thisItem = items[i];
    $.getJSON("myService", { "itemID": thisItem }, (function(thisItem) {
        return function(json) {
            var str = "";
            str += "" + thisItem + "";
            str += "" + json.someMember + "";
            str += "";
            table.append(str);
        }
    })(thisItem));
}

编辑:我所做的只是范围thisItem$.getJSON回调.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有