2014-12-05 99 views
0

我有一些使用async = false进行Ajax调用的功能。我正在使用以下代码显示等待屏幕,显示async = false的ajax调用

$(document).ajaxSend(function (event, request, settings) { 
      $("#__smoke_screen").show(); 
     }); 
     $(document).ajaxComplete(function (event, request, settings) { 
      $("#__smoke_screen").hide(); 
     }); 

要显示等待屏幕但它不适用于同步呼叫。有什么办法可以显示任何类型的同步呼叫等待消息。 PS:我不能async = true。我不能这样做。

感谢

+1

首先同步Ajax调用是一个可怕的用户体验。你应该重新设计使它们异步。其次,在ajax调用过程中,为了等待msg所要做的所有事情,ajax在调用ajax调用之前放置消息,然后在ajax调用之后将其拉下。你可以从字面上制作你自己的函数,执行ajax调用,然后把它拉下来。它是同步的,所以ajax调用只是一个普通的函数调用。 – jfriend00 2014-12-05 03:20:03

+0

为什么你会说你不能做异步?这只是正确的代码设计来做异步Ajax的问题​​。 – jfriend00 2014-12-05 03:29:45

+1

建议:在显示烟雾屏幕或其他“请稍候”屏幕时,请计数“show_please_wait”请求的数量,并且不要隐藏屏幕,直到收到相同数量的“hide_please_wait”请求。这有助于避免您在一行中进行两个异步调用,第一个完成并隐藏屏幕,第二个仍在运行的情况。 – 2014-12-05 03:47:47

回答

2

JavaScript是单线程的意思,虽然控制线程做这样的事情在等待(如,对于Ajax响应),其他什么都可能发生。这包括重新绘制和更新屏幕。您可以做的最好的方法是在您进行Ajax调用之前打开对话框,等待对话框显示(通过某种回调事件),然后进行同步Ajax调用。当呼叫返回时,处理对话。但是,在您的Ajax呼叫等待期间,屏幕不会重新绘制,也不会响应任何用户交互。同步Ajax调用必须非常快速或完全避免。

如果您的同步Ajax调用需要时间,那么设计中很可能出现错误。

还有以下相关的Q &一见:

+0

我只想指出,同步AJAX不是唯一需要这个的原因。就我而言,在更新选项后,我会更新选项,更新大型图表需要20秒左右 - 很高兴能够向我们的用户展示他们点击“显示所有数据点”按钮时发生的事情。这种回调方案非常有帮助! – VG1 2017-06-16 13:42:48