javascript - jQuery.get() 变量作用域

标签 javascript jquery

我正在使用 jQuery 的 Ajax,但在我的例子中,我需要将响应存储在全局变量中:

var points = Array()
$.get("/data", {"id": 1}, function(data) {
    for (var i=0; i < data.length; i++) {
        points[data[i].someid] = data[i];
    }
alert(points[22].someid.toString()); // it works fine
});

alert(points[22].someid.toString()); // undefined

然而,当我尝试访问 $.get() 范围之外的变量点时,我只是得到一个 undefined object 。但是我在 $.get() 中得到了正确的对象。

在这种情况下管理上下文和范围的最佳方式/标准是什么?

最佳答案

您的作用域很好,但是 $.get() 异步运行。它开始调用,然后立即执行第二个警报。当 $.get() 完成时,它会执行 function(data){}。无论你打算用它做什么,你都需要在那里做。如果你在这一切结束后转到 Firebug 控制台,你应该会发现 alert(points[22].someid.toString()) 有你所期望的。


您可以禁用代码中的元素以阻止进一步的用户操作:

var points = Array();

// prevent further user action
$('#actionButton').attr('disabled', true);
// optionally show a loading.gif to let them know the browser is busy

$.get("/data", {"id": 1}, function(data) {
    for (var i=0; i < data.length; i++) {
        points[data[i].someid] = data[i];
    }
    alert(points[22].someid.toString()); // it works fine

    // process points data

    // hide loading.gif
    // re-enable user action
    $('#actionButton').removeAttr('disabled');
});

关于javascript - jQuery.get() 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085513/

相关文章:

javascript - 从 Facebook 加载跨源图像

javascript - 单击 div 内的 iFrame 时如何切换项目?

javascript - 汉堡包菜单 jQuery HTML CSS 无响应

javascript - 如果窗口窄于,则隐藏 DIV 并替换为 DIV

javascript - 表单输入字段 "sometimes"设置为禁用""rails 5

php - 如何从表格内容中获取记录作为弹出表单的数据并显示

javascript - ReactJS 获取数组的每个值

c# - 为什么在字符串中使用引号的javascript转义字符需要\\' instead of\'

javascript - 如何创建自定义属性以添加 if.bind?

javascript - 多次打开多个文件输入而不会丢失之前选择的文件