jjeryui对话框在ajax调用完成之前不会打开(仅限IE)

时间:2011-08-04 00:01:35

标签: ajax internet-explorer jquery-ui jquery

我有一个Web应用程序,只需单击一个按钮,就可以在服务器上完成大量工作。这项工作是由ajax调用启动的,在调用之前我显示了一个jquery ui对话框,其中包含一个动画gif,让用户知道正在发生的事情。工作完成后,ajax调用将返回,对话框将关闭。我遇到的问题是在IE 7/8中,对话框永远不会打开。如果我从回调中删除关闭对话框的代码,那么在调用完成后会显示对话框,这对于帮助不大。

以下是我的对话框的定义:

$("#dgImporting").dialog({
    autoOpen: false,
    width: 250,
    height: 125,
    modal: true,
    resizable: false,
    position: 'center',
    closeOnEscape: false,
    open: function (event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});

这是我用来执行我的ajax调用的方法:

function executeImport(importData) {
importData.carriers = JSON.stringify(selectedCarriers);
$("#dgImporting").dialog("open");
$.ajax({
    type: "POST",
    traditional: true,
    url: "import/execute",
    async: false,
    data: JSON.stringify(importData),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        $("#dgImporting").dialog("close");
    }
});

ajax调用可能需要一分钟才能返回,但是使用此配置我从未看到对话框。如果我删除(“#dgImporting”)。对话框(“关闭”);从回调中我会看到对话框,但是在ajax调用完成之后才会看到,尽管我在进行ajax调用之前调用了对话框(“open”)。

在Firefox和Chrome中,这可以按预期工作,但我真的需要让它在IE中运行。任何一位JavaScript专家都有什么想法我能做什么?

2 个答案:

答案 0 :(得分:3)

看起来可能是async: false设置。来自documentation

  

async 布尔

     

默认值:true

     

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

尝试取出并再次测试。

答案 1 :(得分:0)

解决这个问题的另一种方法是,仍然使用同步ajax调用,将" dialog.open"参与mousedown事件而不是点击。

这样你仍然可以做IE(8)当你把它放在回调中时不喜欢的东西,比如下载文件。