[英]About getJSON function in jQuery
{
"Adam":{
"Math":"93",
"Science":"96",
"Email":"adam@example.com",
"City":"NY"
},
"Tom":{
"Math":"65",
"Science":"56",
"Email":"tom@example.com",
"City":"LA"
},
"Joe":{
"Math":"74",
"Science":"83",
"Email":"joe@example.com",
"City":"Washington"
}
}
上面是http://ActualUrl/path.json上的JSON内容
我正在访问JSON文件,并使用下面的代码用科学的名称和标记填充两个数组。
var names=[];
var marks=[];
$.getJSON("http://path.json",function(data){
$.each(data, function(key, val) {
names.push(key);
// I placed alert the check the value key.
marks.push(parseInt(val.Science));
});
});
alert(names.toString()); // names is found blank
alert(marks.toString());
当我最后检查数组时。 数组为空。 为什么getJSON出现这种错误行为? 我在每个警报中放置了一个,然后检查该值。 它返回正确的值。
$.getJSON
异步触发,这意味着在大多数情况下,到您读出变量时,它尚未完成。 您将需要重组解决方案,以便在成功回调中执行您想做的事情:
$.getJSON("http://path.json", function(data) {
$.each(data, function(key, val) {
names.push(key);
marks.push(parseInt(val.Science));
});
// do your thing here.
});
您正在异步回调中填充数组,但立即提醒它们。 因此,将发生以下情况:
您执行ajax调用。 请求被发送到服务器。
您警报数组的值。 它们为空,因为服务器尚未回复。
服务器回复,触发您的回调并填充数组。 太晚了。
解:
将警报逻辑放入回调中。
jQuery.each
用于迭代集合。 另一方面,您有一个对象(或字典)。
试试这个代码:
for(key in data) {
names.push(key);
var val = data[key];
marks.push(parseInt(val.Science));
}
for ... in ...
构造会迭代对象属性,这就是您想要的。
$ .each描述:遍历jQuery对象,为每个匹配的元素执行一个函数。 (来自: http : //api.jquery.com/each/ )
返回的JSON不是jQuery对象,而只是普通的JavaScript对象。 改用foreach(输入数据)。
哦,将alert()移到回调函数中:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.