我有一个读取一些JSON数据的脚本:
var tempJson;
$.post("scripts/getJSON.php", function(data) {
tempJson = data;
}, 'json');
alert(""); //First alert
alert("That: " + tempJson); //Second alert
当我包含第一个警报行时,第二个警报会按预期给我一个[对象]。当我省略第一个警报线时,我在第二个警报中收到undefined。为什么呢?
答案 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的成功/完成/错误回调/事件。