保存ajax调用的id以在return函数中使用它

时间:2010-10-17 06:45:19

标签: javascript jquery ajax

我有这个代码来填充我的选择框中的选项(我在这个页面中有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>

1 个答案:

答案 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
关闭闭包很棘手:)