因为这需要一段时间,我正在尝试使用jQuery对话框(http://jqueryui.com/demos/dialog/#option-modal)来显示模式对话框,以便用户知道它将需要一会儿。我的功能如下:
$("#modalDiv").dialog({ modal: true, title: "Calling server" });
for (var i = 0; i < callsToMake.length; i++) {
// make a call
}
问题是模态对话框出现,但直到我的电话完成,这是没有意义的。我错过了什么?提前谢谢!
答案 0 :(得分:0)
一个选项可能是在对话框打开后使用setTimeout强制执行长时间运行的调用...
$("#modalDiv").dialog({ modal: true, title: "Calling server" });
setTimeout(function() {
for (var i = 0; i < callsToMake.length; i++) {
// make a call
}
$("#modalDiv").dialog("close"); //close the dialog
}, 500);
答案 1 :(得分:0)
我已经制作了一个模拟ajax调用的可能解决方案的示例:
基本上你必须创建一个类似的机制,以确保你的电话通过服务器进行,并带回你的信息..然后你用你收到的数据更新你的ui并检查你的收集,看看是否所有电话已经完成了,如果他们这样做了,你就关闭模态..
这个样本不是很好,我只是做了它工作 ..但它只是为了展示这个概念。
答案 2 :(得分:0)
同步发出请求不会减少服务器的负载,只会使用户的浏览器无响应。您应该考虑的是如何将我的服务器调用减少到1.如果您不能这样做,则需要跟踪AJAX调用何时完成。
要跟踪所有通话的完成时间,您可以采用以下两种方式之一。没有足够的代码来构建代码示例,所以这里有一个简短的描述。
<强>最简单/哈克强> 使用ajaxStop事件。
这里的想法是你循环并发出所有的ajax调用。假设当时只进行这些调用。在运行$.ajax
100次结束时,请注册ajaxStop
个事件。当所有ajax事件都完成后,将发出此回调。然后,您可以关闭对话框。
正确的方式 了解deferred对象。我不会假装这很容易。
您创建了一个知道所有ajax调用的延迟对象。完成后,您可以关闭dialog.close()
。如果这种方法引起你的兴趣,我可以提供一个简短的例子。否则,使用上面的hack将在简单的情况下工作。
答案 3 :(得分:0)
我有一个非常类似的问题:
作为一般解决方案,这将是算法:
showModal();
setTimeout(function() {
doLongJob();
removeModal();
}, 200);