Jquery 显示async=false的ajax调用的等待屏幕

Jquery 显示async=false的ajax调用的等待屏幕,jquery,ajax,asynchronous,Jquery,Ajax,Asynchronous,我有一些使用async=false进行Ajax调用的功能。我正在使用以下代码 $(document).ajaxSend(function (event, request, settings) { $("#__smoke_screen").show(); }); $(document).ajaxComplete(function (event, request, settings) { $("#__smoke_sc

我有一些使用async=false进行Ajax调用的功能。我正在使用以下代码

  $(document).ajaxSend(function (event, request, settings) {
            $("#__smoke_screen").show();
        });
        $(document).ajaxComplete(function (event, request, settings) {
            $("#__smoke_screen").hide();
        });
显示等待屏幕,但不适用于同步呼叫。是否有任何方法可以显示任何类型的同步呼叫等待消息

PS:我无法设置为async=true


感谢您,JavaScript是单线程的,这意味着当控制线程执行诸如等待(例如等待Ajax响应)之类的操作时,不会发生其他任何事情。这包括重新绘制和更新屏幕。最好在进行Ajax调用之前打开一个对话框,等待对话框显示(通过某种回调事件),然后进行同步Ajax调用。当调用返回时,处理该对话框。但是,在Ajax调用等待期间,屏幕将不会重新绘制,也不会响应任何用户交互。同步Ajax调用必须非常快,或者完全避免

如果同步Ajax调用需要时间,那么设计中很可能存在错误

另请参见以下相关问答:


第一次同步ajax调用是一种可怕的用户体验。您可能应该重新设计以使它们异步。其次,在同步ajax过程中,等待消息所要做的就是在调用ajax调用之前显示消息,然后在调用ajax之后将其下拉。您可以直接创建自己的函数,将其放置起来,执行ajax调用,然后将其取下。它是同步的,所以ajax调用就变成了一个普通的函数调用。你为什么说你不能异步呢?异步ajax只是一个正确的代码设计问题。建议:当显示烟雾屏或其他“请等待”屏幕时,计算“show\u please\u wait”请求的数量,在收到相同数量的“hide\u please\u wait”请求之前不要隐藏屏幕。这有助于避免在一行中进行两个异步调用,第一个完成并隐藏屏幕,第二个仍在运行。在我的例子中,我在渲染highcharts后更新选项,对于大型图表,更新大约需要20秒——当用户单击“显示所有数据点”按钮时,能够向用户显示确实发生了一些事情,这很好。这个带有回调的解决方案非常有帮助!