JavaScript:Ajax请求后的全局变量

这个问题非常简单和技术性:

var it_works = false;

$.post("some_file.php", '', function(data) {

it_works = true;

});

alert(it_works); # false (yes, that 'alert' has to be here and not inside $.post itself)

我要实现的是:

alert(it_works); # true

有没有办法做到这一点?如果不是,可以$.post()返回一个值应用于it_works

回答:

您期望的是 ( 阻塞 )类型的请求。

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

// ...

编程稍微 因为发出请求的结果被封装在一个函数中,而不是遵循请求语句。 ,

到的实时行为可能会 因为他们不会看到缓慢的服务器或缓慢的网络导致浏览器像崩溃一样运行。 编程是 ,

在人们 的应用程序中使用。

道格拉斯·克罗克福德

以上是 JavaScript:Ajax请求后的全局变量 的全部内容, 来源链接: utcz.com/qa/402335.html

回到顶部