这是我输入Firebug的脚本:
var jsonData;
$.getJSON("./js/ohno.JSON",function(data){
jsonData = data;
});
console.log(jsonData);
这是.JSON文件内容:
{"oh":"no"}
我第一次在Firebug中运行脚本时,它返回“undefined”
第二次运行它(没有刷新页面)它返回Object。
如果我刷新,同样的事情发生 - 第一次运行返回“undefined”,第二次运行它返回Object。
.JSON文件是
如何在第一次运行脚本时返回Object?
答案 0 :(得分:9)
getJSON是异步的;意味着脚本执行将继续,同时它仍然会加载数据。
你必须等到它完成。
var jsonData;
$.getJSON("./js/ohno.JSON",function(data){
jsonData = data;
console.log(jsonData);
});
答案 1 :(得分:4)
您需要在回调函数中放置console.log
(以及您希望在data
上运行的任何其他代码):
$.getJSON("./js/ohno.JSON",function(data){
jsonData = data;
console.log(jsonData);
});
如果您觉得需要将其分开,也可以使用.ajaxComplete
。
答案 2 :(得分:3)
getJSON
是异步的,这就是为什么你必须提供一个回调来处理数据。该请求被触发,但是到达console.log
时尚未完成,因此值未定义。它稍后完成并设置变量。
将console.log
处理程序移到回调中,所有处理程序都应该按预期工作。
答案 3 :(得分:1)
匿名function
是异步回调,因此在<{strong>> console.log
之后会被称为。
这是正确的方法:
var jsonData;
$.getJSON("./js/ohno.JSON",function(data){
jsonData = data;
console.log(jsonData);
});
答案 4 :(得分:1)
getJSON函数是异步的,因此只有在请求完成后才会执行成功回调函数。您的console.dir()最初在响应发生之前执行。
将console.dir()放在你的getJson处理函数中。