$ .getJSON()在脚本第一次运行时无法正常工作,但它第二次执行。如何让它第一次运行?

时间:2013-01-17 22:44:32

标签: javascript jquery json

这是我输入Firebug的脚本:

var jsonData;

$.getJSON("./js/ohno.JSON",function(data){
    jsonData = data;
});

console.log(jsonData);

这是.JSON文件内容:

{"oh":"no"}

我第一次在Firebug中运行脚本时,它返回“undefined”

第二次运行它(没有刷新页面)它返回Object。

如果我刷新,同样的事情发生 - 第一次运行返回“undefined”,第二次运行它返回Object。

.JSON文件是

如何在第一次运行脚本时返回Object?

5 个答案:

答案 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处理函数中。