Jquery ui 如何在AJAX调用之前显示jQueryUI对话框?

Jquery ui 如何在AJAX调用之前显示jQueryUI对话框?,jquery-ui,jquery,Jquery Ui,Jquery,我试图在使用JQuery执行AJAX调用时向用户显示一个对话框。我需要调用“async:false”,因为页面的其他部分依赖于数据,并且我不能在“success”字段中包含所需的所有代码 使用Firefox和Opera,对话框可以正确显示,但是在IE和Chrome中,它会等待页面完全呈现,并且根本不显示对话框。这是一个非常接近实际实现的示例,这是一个更大的项目,我尝试将其剥离到涉及的最小值 我想在开始ajax调用之前找到一种显示对话框的方法,并在对话框完成后关闭对话框。AJAX调用必须保持“a

我试图在使用JQuery执行AJAX调用时向用户显示一个对话框。我需要调用“async:false”,因为页面的其他部分依赖于数据,并且我不能在“success”字段中包含所需的所有代码

使用Firefox和Opera,对话框可以正确显示,但是在IE和Chrome中,它会等待页面完全呈现,并且根本不显示对话框。这是一个非常接近实际实现的示例,这是一个更大的项目,我尝试将其剥离到涉及的最小值

我想在开始ajax调用之前找到一种显示对话框的方法,并在对话框完成后关闭对话框。AJAX调用必须保持“async:false”。这可能吗?我该怎么做

任何帮助都将不胜感激。最终的答案需要在IE8/9、Firefox和Chrome中使用。歌剧和狩猎是额外的奖励:)


作为对其中一个回答的回应,我修改了小提琴以显示我的意思:


文档准备好后,尝试运行所有代码:

$(function(){
  var page = new pageManager();
  page.LoadData();
});

如果代码是在文档完全就绪之前执行的,那么jQuery的一些选择器(例如,
$(“#dialog”)
)可能没有效果,因为元素尚未就绪。这取决于浏览器如何构造页面,以及元素的顺序等。

这里的问题是jQuery UI的dialog open函数本身是异步运行的(用于处理打开对话框时可能需要出现的动画)。因此,要使其正确运行,您需要在
对话框open
事件处理程序中运行代码

现场示例-


尽管如此,我强烈反对使用同步XHR请求。从长远来看,它们会使代码的可维护性大大降低。使用jQuery的延迟,您可以将多个函数排队,以便在AJAX调用完成后运行。这里有一篇关于这项技术的精彩文章-。

我通常在$(文档)中运行它;block,(我认为JSFIDLE默认会这样做,或者我会包括…我可能错了…)但是我在chrome和IE中尝试了你的建议,结果相同,对话框不会出现。试着检查chrome的开发工具,看看你是否能让对话框出现,或者尝试检查对话框元素,看看它有什么问题。如果我添加一个按钮并将一个“click”事件绑定到它,然后在IE或Chrome中调用page.dislpayDialog,那么按钮单击将很好地显示对话框。这似乎与ajax调用有关。我修改了fiddle来说明我的意思:是的,这似乎是因为您使用了
async:false
,因为当我将您的代码转换为异步时,您的代码在Chrome中运行良好: