我有这个代码来填充我的选择框中的选项(我在这个页面中有 7 个选择框),并使用来自服务器的 json 响应(ajax)
for (j=1; j <= 7; j++){
$.getJSON('mobile_json.php', {id:j}, function(data) {
var select = $('#userAccess' + j);
var options = select.attr('options');
$.each(data, function(index, array) {
options[array['Id']] = new Option(array['Name']);
});
});
}
问题是在调用ajax之后, j
等于 8
,
我想要的是当函数处理 json 数组时,将其设置为右侧选择框,例如: userAccess1 , userAccess2 ... userAccess7,
我该如何处理?
最佳答案
这是因为您正在循环中创建闭包。 This helped me to understand it better (尤其是示例 5)。
解决这个问题的一种方法是创建一个匿名函数并立即执行它:
for (j=1; j <= 7; j++){
(function(index) {
$.getJSON('mobile_json.php', {id:index}, function(data) {
var select = $('#userAccess' + index);
var options = select.attr('options');
$.each(data, function(index, array) {
options[array['Id']] = new Option(array['Name']);
});
});
})(j)
}
这“捕获”了j
的当前值。如果不这样做,则在执行闭包(Ajax 请求的回调函数)时,循环已完成,j
的值为 8
.
这就是闭包的棘手之处:)
关于javascript - 保存ajax调用的id以在返回函数中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952293/