簡體   English   中英

jQuery.get()變量范圍

[英]jQuery.get() Variables Scope

我正在使用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()完成后,它將執行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');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM