为什么我的闭包变量在使用$后被清除.每个都使用JSON数据
Why is my closure variable cleared after using $.each on JSON data?
考虑以下示例:
var features = [];
$.getJSON(annotations_url, function(data) {
$.each(data, function(key, val) {
features.push(wkt_parser.read(val.annotation.wkt_data));
// at this point, "features" contains objects
});
});
annotationLayer.addFeatures(features);
// here, it is empty again
在这里,我预计features
会持续增长。然而,在最后一行中,features
又为空。
为什么是这样,我如何正确地将值从$.each
内推到features
(或者更确切地说,内部的匿名函数)?
$.getJSON
调用是异步的,因此annotationLayer.addFeatures
可能在JSON请求完成之前执行。在.each
循环之后,在$.getJSON
调用中调用addFeatures
方法。
如果您需要使用features
执行更多内容,请考虑创建一个新函数(其中包含您需要调用的addFeatures
方法),然后在$.getJSON
调用中的.each
循环之后调用这个新函数。
这与$.getJSON
函数的异步行为有关。将annotationLayer.addFeatures(features);
移到$.getJSON
函数中
features
变量没有被"清除";相反,当执行annotationLayer.addFeatures(features);
时,它没有被填充。
相关文章:
- 清除数据并将旧值附加到文本框中
- 如何在使用AngularJS更改下拉值时清除表单中的数据
- 有没有办法清除客户端上的XHR缓存数据
- 我无法从引导模式中清除表单数据
- 选中复选框时清除填充有datatime选取器数据的文本框
- 谷歌地图API-在从ajax页面加载新数据之前清除标记、多段线
- 在文本框focusout事件的局部视图中清除表数据
- 在清除浏览数据之前调用javascript函数
- ckeditor在引导模式下打开时清除数据
- 当我点击或聚焦输入时,我想清除或阻止输入点击旧数据
- 如何重新启用禁用的下拉列表以及如何清除文本框数据
- 清除网络视图数据
- 打开引导模式时如何清除以前的数据
- 如何删除和清除所有本地存储数据
- 数据表清除搜索输入和正则表达式
- 如何在 angularjs 应用程序中注销时删除/清除存储在范围变量中的数据
- 如何从网格数据表插件 jQuery 中清除数据
- 闪亮r:通过点击绘图清除数据表中的选定行
- 以角度形式清除数据
- 清除数据,如果浏览器使用Horizon.io重新加载