2014-09-26 34 views
0

我有一个同步 ajax调用某些服务。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活动正在进行。

回答

1

设置async: false将防止进一步脚本的运行(或完全锁定的网站),直到你的Ajax完成

详见这里What does "async: false" do in jQuery.ajax()?

From the documentation

[...]默认情况下, ,所有请求异步发送 (即默认设置为true)。如果您需要 同步请求,请将此选项设置为false。跨域请求 和dataType:“jsonp”请求不支持同步操作。 请注意,同步请求可能会暂时锁定浏览器, 禁用请求处于活动状态时的任何操作。 [...]

简单地删除该行应该可以解决您的问题。

+0

是的,它修复了它,但我希望它运行同步而不是异步。如果在通话后显示另一个弹出窗口,它会立即显示。我想要在两个对话框之间暂停。 – 2014-09-26 12:57:25