我对某些服务进行了 synch ajax调用。
我想首先显示一个对话框(在我的情况下,它是一个 extjs 窗口......但这不是重点。同样的问题发生在一个简单的警报上(。 。))。
然后在显示对话框后立即调用ajax调用,大约需要30秒才能完成。但是,对话框仅在ajax调用运行完成后显示(即在30秒时间内)。我甚至试图把它暂停,但这并没有改变任何东西。
Util.logInfo('1. before popup')
setTimeout(function(){alert("Hello")},1000); //some kind of GUI action
Util.logInfo('2. after popup')
var self = this;
var call = {}
call.url = url;
call.xmlHttpReq = $.ajax({
url: 'somewebserviceURLthattakesaloooongtime',
dataType: 'json',
async: false,
type: 'GET'
}).always(function (processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) {
self.data = processedDataOrXHRWrapper;
});
Util.logInfo('3. after ajax')
这是jQuery ajax功能的一个特殊问题,还是我遗漏了一些基本的东西 关于 ajax 如何运作?
来自Java背景,几乎就像某种 event-dispatch-thread 活动一样。
答案 0 :(得分:1)
设置async: false
将阻止其他脚本运行(或完全锁定网站),直到您的ajax完成为止
在此处查看更多What does "async: false" do in jQuery.ajax()?
[...]默认情况下,会发送所有请求 异步(即默认设置为true)。如果你需要 同步请求,将此选项设置为false。跨域请求 和dataType:“jsonp”请求不支持同步操作。 请注意,同步请求可能会暂时锁定浏览器, 在请求处于活动状态时禁用任何操作。 [...]
只需删除该行就可以解决您的问题。