javascript – jQuery.get()变量范围

我正在使用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()范围之外的变量点时,我只得到一个未定义的对象.但我在$.get()中得到了正确的对象.

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

最佳答案 您的范围很好,但$.get()以异步方式运行.它启动呼叫然后立即执行第二个警报.当$.get()完成时,它执行函数(data){}.无论你打算用什么,你都需要在那里做.如果你在完成所有这些之后去firebug控制台,你应该发现那个警报(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');
});
点赞