我是jQuery的新手,并且非常喜欢我遇到的一个问题。它应该很简单。基本上,第一个警报是空的,但是当我第二次调用变量时,它会给出预期的结果。
$.post("showcolor.php", { color: "orange"},
function(data) {
colorInfo = data;
});
alert(colorInfo); //empty
alert(colorInfo); //expected results
有人可以向我解释这个现象吗?
答案 0 :(得分:1)
Ajax是异步的。这意味着请求在后台运行,而代码则在运行。
请求完成后,success
回调(function(data)
)将会运行。在您的测试中,在执行第6行之前,显示了第5行警报期间的情况。
在较慢的连接上,它将花费更长的时间,第6行也会显示为空。请求完成后完全是随机的。
底线:将需要知道请求结果的任何代码放入success
回调中。
答案 1 :(得分:0)
AJAX请求是异步的,这意味着colorInfo = data
的分配可能比警报要晚得多。
这是怎么回事:
当然这一切都是随机的。如果服务器响应速度非常快,您可能会得到第一个警报显示正确的值,而另一方面,如果服务器速度很慢,则两个警报可能显示错误的值。
所以正确的方法是将警报放在成功回调中,因为它只在这个匿名函数中,你可以保证分配数据:
$.post("showcolor.php", { color: "orange" }, function(data) {
alert(data);
});
答案 2 :(得分:0)
这是因为Ajax请求将与您的第一个警报同时完成;数据尚未归还。
将警报放在函数内部,这将在Ajax请求完成时执行。
答案 3 :(得分:0)
您可以firebug与mozilla firefox一起使用来调试它并识别其工作原理。