Javascript匿名函数未更新全局变量

Javascript anonymous function not updating global variable

本文关键字:更新 全局变量 函数 Javascript      更新时间:2023-09-26

我在一些代码中有一个$.getJSON调用,它似乎没有更新全局变量,我不知道为什么。JSON数据加载正常,但由于某些原因,全局EventOptions数组没有在for{}循环中更新。大写注释指的是变量。有什么想法吗?感谢

function LoadMeasurementTypes() {
    // Clear out EventOptions
    EventOptions = ["..."];
    // Push a couple on to EventOptions - THESE ADD OK
    EventOptions.push("Temperature");
    EventOptions.push("Pulse rate");
    // Call json to get measurementTypes off the table    
    $.getJSON('./get-measurement-types.php', function (measurementTypeData) {
        // Process each json element ([0].BP, [1].ph (Urine) etc.
        for (var i = 0; i < measurementTypeData.length; ++i) {
            // e is a storage variable to contain the current element
            var e = measurementTypeData[i];
            // Add the new measurement type
            alert(e.measure_type); // OK works - we can see the measure_type
            EventOptions.push(e.measure_type); // THESE ARE NOT BEING ADDED 
        }
    } // end anonymous function
    ) // end get json call
    EventOptions.push("Last one"); // THIS ONE IS BEING ADDED
}

您的EventOptions[]不全局可见。我的猜测是,它在本地对$.getJSON调用仍然可见;但因为它现在的范围是jquery,所以它明显被模糊了(你在你的anon函数中alert(EventOptions);要测试吗?.

要正确确定作用域,只需在LoadMeasureTypes()之外声明它。

var EventOptions = ["..."];
function LoadMeasureTypes(){...

-更新

如果这不起作用,您可以始终将匿名函数拉到$.getJSON()之外,并为其分配一个变量名:

var retreiveTypes = function(){...};
$.getJSON("..path/php", retreiveTypes);
window.EventOptions = ["..."]

很好的"破解"将东西放在全局上下文

得到了答案:好吧。它在iTouch Safari上不起作用,但在Firefox(Mac)上可以。Bosworth我认为这是你上面提到的浏览器问题。有趣的是,这可能与线程有关。外部循环似乎在内部匿名循环完成之前运行(警报没有按顺序!)。我不认为javascript以这种方式使用线程,但我可能错了。

我现在怀疑整个问题是时间问题——作为匿名函数的新线程没有及时完成。

谢谢大家。