AJAX调用块显示对话框

时间:2014-09-26 12:31:41

标签: javascript jquery ajax

我对某些服务进行了 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 活动一样。

1 个答案:

答案 0 :(得分:1)

设置async: false将阻止其他脚本运行(或完全锁定网站),直到您的ajax完成为止

在此处查看更多What does "async: false" do in jQuery.ajax()?

From the documentation

  

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

只需删除该行就可以解决您的问题。