如何解决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这样使用线程,但是我可能是错的。
我现在怀疑整个问题是一个时机问题-作为匿名函数的新线程未能及时完成。
谢谢你们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。