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