您期望的是同步(阻塞)类型的请求。
var it_works = false;
jQuery.ajax({
type: "POST",
url: 'some_file.php',
success: function (data) {
it_works = true;
},
async: false //
});
// Execution is BLOCKED until request finishes.
// it_works is available
alert(it_works);
默认情况下,请求是异步(非阻塞)的,这意味着浏览器不会等待它们完成才能继续工作。 这就是为什么您的警报得到错误结果的原因。
现在,使用jQuery.ajax,您可以选择将请求设置为同步,这意味着脚本将仅在请求完成后才继续运行。
但是,推荐的方法是重构代码,以便在请求完成后立即将数据传递给回调函数。 这是优选的,因为阻止执行意味着阻止UI,这是不可接受的。 这样做:
$.post("some_file.php", '', function(data) {
iDependOnMyParameter(data);
});
function iDependOnMyParameter(param) {
// You should do your work here that depends on the result of the request!
alert(param)
}
// All code here should be INDEPENDENT of the result of your AJAX request
// ...
异步编程稍微复杂一点,因为结果 提出请求的方法封装在函数中,而不是遵循请求语句。 但是用户体验到的实时行为可能会很明显 更好,因为他们不会看到服务器速度缓慢或网络速度缓慢导致 浏览器就好像崩溃了一样。 同步编程是无礼的 并且不应在人们使用的应用程序中使用。
道格拉斯·克罗克福德(YUI博客)