javascript - 保存ajax调用的id以在返回函数中使用它

标签 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,

我该如何处理?

最佳答案

这是因为您正在循环中创建闭包。 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/

相关文章:

javascript - AJAX更新对象列表

jquery - liferay portlet 上的 AJAX

javascript - 一张背景图片,多个 Div

jquery - 按 Enter 键检查或选择复选框

javascript - jQuery 验证在有效时启用提交按钮

php - html 值和准备好的语句

javascript - 默认 NULL 未设置

javascript - Razor 中传递给 JavaScript 的变量内的转义 '@' 字符

javascript - JTEXTPANE 多彩前景设置

javascript - 在 bootstrap 中固定视频后,Div 位置不正确