我有一个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专家都有什么想法我能做什么?
答案 0 :(得分:3)
看起来可能是async: false
设置。来自documentation:
async 布尔
默认值:true
默认情况下,所有请求都是异步发送的(默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:“jsonp”请求不支持同步操作。 请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。
尝试取出并再次测试。
答案 1 :(得分:0)
解决这个问题的另一种方法是,仍然使用同步ajax调用,将" dialog.open"参与mousedown事件而不是点击。
这样你仍然可以做IE(8)当你把它放在回调中时不喜欢的东西,比如下载文件。