我有这个代码来填充我的选择框中的选项(我在这个页面中有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,
我该如何处理它?</ p>
答案 0 :(得分:4)
这是因为你在循环中创建闭包。 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
。
关闭闭包很棘手:)