1

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

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

当我包含第一个警报行时,第二个警报按预期给了我一个 [Object object]。当我省略第一个警报行时,我在第二个警报中收到 undefined。为什么?

4

3 回答 3

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');
于 2012-11-20T22:28:43.100 回答
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
于 2012-11-20T22:28:10.177 回答
0

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

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

于 2012-11-20T22:29:48.123 回答