从 JSON 文件加载后立即使用数据结果
Using data results immediately after loading from JSON file
加载后立即使用从 JSON 文件加载的数据时遇到了一些问题。下面的代码。
newdata = []
$.getJSON(file, function(data) {
$.each(data.items, function(i,item){
if (item.id != undefined) {
if (item.id === cl) {
newdata.push(item.id);
}
}
});
});
console.log(newdata);
console.log
语句不返回数据,它返回一个空数组[]
。但是,如果我在 chrome 调试器中调用变量data
,它会返回正确的数组。如何在从 JSON 文件创建数据后立即使用具有正确元素的数据?
应该这样写,
newdata = []
$.getJSON(file, function(data) {
$.each(data.items, function(i,item){
if (item.id != undefined) {
if (item.id === cl) {
newdata.push(item.id);
}
}
});
console.log(newdata);
});
jQuery.getJSON
是 异步的。您应该阅读有关它的文档以熟悉其成功回调的工作原理。
接收 JSON 数据的函数在成功时被调用,但实际的$.getJSON
函数会立即返回并继续执行。因此,实际上,这意味着您的console.log(data)
会在 JSON 数据返回之前执行,但当您在 Chrome 控制台中手动记录数据时,数据已被检索。
jQuery AJAX 方法还返回实现类似 promise 的 API 的对象,因此您也可以使用它。
关于这个主题有很多很多关于堆栈溢出和其他资源的问题。
下面的代码同时使用 success
函数参数和Deferred
对象方法。您可以在handleData
函数中对数据执行任何操作。
function handleData(data) {
// you can do whatever you want with your data here
console.log(data);
}
function formatData(data) {
var formatted = [];
$.each(data.items, function(i,item){
if (item.id != undefined) {
if (item.id === cl) {
formatted.push(item.id);
}
}
});
return formatted;
}
$.getJSON(file, formatData).done(handleData);
另一种方法是:
$.ajaxSetup({
async: false
});
但是在被指出该方法已被弃用之后,melc 和 Thomas Upton 给出了更好的方法来做到这一点。
相关文章:
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 无法使用streams/highland.js从mongodb的结果中获取数据
- 从 Angular 数据工厂中的 HTTP POST 请求接收未定义的结果
- 停止 jQuery 自动完成以过滤/搜索结果并填充整个源数组数据
- 有没有一个简单的解决方案可以根据3个数据找到结果
- 将base64图像数据作为src分配给图像时,Firefox和Chrome上的结果不一致
- 重新排序angularjs ngRepeat与后续数据结果
- 从sqlite数据库查询数据结果文件名
- 如何显示查询回调数据结果仅从开始
- 从 JSON 文件加载后立即使用数据结果
- 如何避免数据结果中的 html 代码
- 将 JavaScript 数据结果放入表单输入值
- 将段落文本设置为 JSON 数据结果
- 通过循环更改 JSON 格式的数据.结果是三倍
- 数据显示更新数据结果,但更新数据结果是不工作的PHP
- 如何让jquery循环json数据结果,以创建一个两列表
- 跨域请求显示数据结果
- 在向上传递promise时更改数据结果
- 如何合并两个facebook图api数据结果(JSON)
- 如何从ajax数据结果填充javascript数组