我对某些服务进行了同步 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活动。
发布于 2014-09-26 12:35:42
在ajax完成之前,设置async: false将防止进一步的脚本运行(或完全锁定网站)。
在这里可以看到更多在jQuery.ajax()中,异步:false是做什么的?
从文件中
..。默认情况下,所有请求都是异步发送的(即默认设置为true )。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:"jsonp“请求不支持同步操作。请注意,同步请求可能暂时锁定浏览器,在请求处于活动状态时禁用任何操作。..。
只要去掉这一行就能解决你的问题。
https://stackoverflow.com/questions/26059642
复制相似问题