如何在AJAX调用之前显示JQuery UI对话框?
我试图在使用JQuery执行AJAX调用时向用户显示一个对话框。 我需要调用“async:false”,因为页面的其他部分依赖于数据,我不能包含“success”字段中所需的所有代码。
使用Firefox和Opera,对话框显示正常,但在IE和Chrome中,它会等待页面完全呈现,并且根本不显示对话框。 这是一个非常接近实际实现的示例,这是一个更大的项目,我试图将其剥离到最小化。
http://jsfiddle.net/mcraig_brs/eNMna/
我想找到一种在启动ajax调用之前显示对话框的方法,并在完成后关闭对话框。 AJAX调用必须保持“async:false”。 这可能吗?我该怎么做?
任何帮助,将不胜感激。 最终答案需要在IE8 / 9,Firefox和Chrome中运行。 歌剧和safari将是奖金:)
为了回应其中一个回复,我修改了小提琴来表明我的意思:
http://jsfiddle.net/mcraig_brs/BBhdS/
在文档准备好后尝试运行所有代码:
$(function(){ var page = new pageManager(); page.LoadData(); });
如果在文档完全就绪之前执行代码,jQuery的一些选择器(例如, $("#dialog")
)可能没有效果,因为元素还没有准备好。 这取决于浏览器构建页面的方式与元素的排序方式等。
这里的问题是jQuery UI的对话框打开函数本身是异步运行的(以处理打开对话框时可能需要进行的动画)。 因此,要正确运行,您需要在dialogopen
事件处理程序中运行代码。
实例 – http://jsfiddle.net/tj_vantoll/YR7RC/
话虽如此,我强烈反对使用同步XHR请求。 从长远来看,它们会使您的代码难以维护。 使用jQuery的延迟,您可以排队多个函数,以便在AJAX调用完成后运行。 这里有关于这项技术的优秀文章 – http://rmurphey.com/blog/2010/12/25/deferreds-coming-to-jquery/ 。