JavaScript:Ajax请求后的全局变量
这个问题在这里已经有了答案:
你期望的是同步 (阻塞)类型的请求。
var it_works = false;
jQuery.ajax({
type: "POST",
url: 'some_file.php',
success: function (data) {
it_works = true;
},
async: false // <- this turns it into synchronous
});
// 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
// ...
异步编程稍微复杂一点,因为发出请求的结果被封装在一个函数中,而不是遵循请求语句。 但 用户体验的实时行为可能会更好,因为他们不会看到缓慢的服务器或缓慢的网络,导致浏览器表现得像崩溃一样。 同步编程是不尊重的 , 不应该用于人们使用的应用程序。
Douglas Crockford (YUI博客)
AJAX代表异步JavaScript和XML。 因此,到服务器的帖子发生与该函数的其余部分不同步。 尝试一下这样的代码(它只是将简写$.post
分解为更长的$.ajax
调用并添加了async
选项)。
var it_works = false;
$.ajax({
type: 'POST',
async: false,
url: "some_file.php",
data: "",
success: function() {it_works = true;}
});
alert(it_works);
希望这可以帮助!
看来你的问题只是一个并发问题。 帖子函数需要一个回调参数来告诉你帖子何时完成。 你不能像这样在全球范围内发出警报,并且期望该帖子已经完成。 您必须将其移至回调函数。
链接地址: http://www.djcxy.com/p/9477.html上一篇: JavaScript: Global variables after Ajax requests
下一篇: How to make code wait while calling asynchronous calls like Ajax