我有一块jQuery代码快速调用几个get
JSON()调用:
var table = $("table#output"); for (var i in items) { var thisItem = items[i]; $.getJSON("myService",{ "itemID": thisItem },function(json) { var str = "<tr>"; str += "<td>" + thisItem + "</td>"; str += "<td>" + json.someMember + "</td>"; str += "</tr>"; table.append(str); }); }
当我对一个滞后的服务器运行这个表时,表格中填满了预期的json.someMember值(它们按顺序排列:我不介意),但是thisItem列填充有来自各种迭代的值的不可预测的混合.
我假设这是与范围和时间有关的 – 回调函数从更广泛的范围读取thisItem?我对吗?如何防止这种情况?
我目前的解决方法是让JSON服务返回其输入的副本 – 这至少不足以说明.
解决方法
看起来像一个范围界定问题由于循环.尝试这个:
var table = $("table#output"); for (var i in items) { var thisItem = items[i]; $.getJSON("myService",(function(thisItem) { return function(json) { var str = "<tr>"; str += "<td>" + thisItem + "</td>"; str += "<td>" + json.someMember + "</td>"; str += "</tr>"; table.append(str); } })(thisItem)); }
编辑:所有我做的是范围thisItem到$.getJSON回调.