{
"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?我在每个中都设置了警报并检查了值。它返回正确的值。
答案 0 :(得分:4)
$.getJSON
异步触发,这意味着在大多数情况下,在您读出变量时它不会完成。您需要重新构建解决方案,以便在其成功回调中执行您想要执行的操作:
$.getJSON("http://path.json", function(data) {
$.each(data, function(key, val) {
names.push(key);
marks.push(parseInt(val.Science));
});
// do your thing here.
});
答案 1 :(得分:2)
您正在异步回调中填充数组,但会立即提醒他们。所以,这就是:
您执行ajax调用。请求被发送到服务器。
您提醒数组的值。它们是空白的,因为服务器尚未回复。
服务器回复,您的回调被触发并且数组被填充。太晚了。
解决方案:
将警报逻辑放入回调中。
jQuery.each
用于迭代集合。另一方面,你有一个对象(或字典)。
试试这段代码:
for(key in data) {
names.push(key);
var val = data[key];
marks.push(parseInt(val.Science));
}
for ... in ...
构造迭代对象属性,这就是你想要的。
答案 2 :(得分:0)
$。each描述:迭代jQuery对象,为每个匹配的元素执行一个函数。 (来自:http://api.jquery.com/each/)
返回的JSON不是jQuery对象,只是一个普通的JavaScript对象。请改用foreach(键入数据)。
哦,并在回调函数中移动alert():)