Javascript匿名函数未更新全局变量
Javascript anonymous function not updating global variable
我在一些代码中有一个$.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以这种方式使用线程,但我可能错了。
我现在怀疑整个问题是时间问题——作为匿名函数的新线程没有及时完成。
谢谢大家。
相关文章:
- 更新后,父视图未在 Electron 中的
上设置全局变量 - 用javascript更新事件函数中的全局变量
- 从函数更新全局变量
- 全局变量在 javascript 中未更新
- 在 NodeJS 中使用和更新全局变量是否安全?
- 在 Javascript 中本地更新全局变量
- 在 JavaScript 中回溯,无法更新全局变量
- 更新全局变量javascript/html
- JavaScript更新全局变量
- 通过回调更新全局变量
- 在javascript中更新全局变量
- 可以't从一个角度内更新全局变量.forEach循环
- 从函数更新全局变量
- 如何在窗口关闭时更新全局变量
- 侦听器调用的Javascript函数不能更新全局变量
- 从eventlistener更新全局变量
- 无法在函数内部更新全局变量并在函数外部调用它(jQuery)
- 用函数中的值更新全局变量;它被存储在一个变量中
- Javascript匿名函数未更新全局变量
- 更新全局变量