JQUERY / JSON数据未定义,然后神秘地定义

时间:2012-11-20 22:26:05

标签: javascript jquery json

我有一个读取一些JSON数据的脚本:

var tempJson;
$.post("scripts/getJSON.php", function(data) {
     tempJson = data;
}, 'json');
alert("");  //First alert
alert("That: " + tempJson);  //Second alert

当我包含第一个警报行时,第二个警报会按预期给我一个[对象]。当我省略第一个警报线时,我在第二个警报中收到undefined。为什么呢?

3 个答案:

答案 0 :(得分:4)

因为它是异步的,当你关闭警报时,ajax已经完成,数据返回并分配给变量。

你应该

var tempJson;
$.post("scripts/getJSON.php", function(data) {
     tempJson = data;
     alert(tempJson); // or whatever you want to do with the data should go here..
}, 'json');

答案 1 :(得分:0)

这让我觉得是时间问题。您正在触发请求,然后检查您在帖子脚本后立即检查的回调中的值。 AJAX是异步的...又名异步JavaScript和XML

var tempJson;
$.post("scripts/getJSON.php", function(data) {
     tempJson = data;

     // Callback here, response has most definitely happened
     alert(tempJson);
}, 'json');

// Response may not have happened yet when this is executed
alert("");  //First alert
// Still might not have happened when this is executed
alert("That: " + tempJson);  //Second alert

答案 2 :(得分:0)

jQuery AJAX默认是同步的。因此,如果您的请求延迟一点,您的警报就不会有请求数据。正确的是您在回调中拨打警报。

目前您可以将AJAX请求更改为同步,但现在它已被jQuery弃用,它会挂起您的浏览器。因此,最好的方法是使用jqXHR的成功/完成/错误回调/事件。