Javascript匿名函数无法更新全局变量

问题描述

| 在某些代码中,我有一个$ .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我认为这是您在上面提到的浏览器问题。 有趣的是,这可能与线程有关。似乎在内部匿名循环完成之前运行了out循环(警报未按顺序进行!)。我不认为javascript这样使用线程,但是我可能是错的。 我现在怀疑整个问题是一个时机问题-作为匿名函数的新线程未能及时完成。 谢谢你们。