wafBlock阻塞控件和AJAX同步请求一起使用遮罩层不显示的问题

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:2

wafBlock阻塞控件和AJAX同步请求一起使用遮罩层不显示的问题

一、问题场景

    使用waf.doPost请求设置async:false后不出现遮罩层,自己加上waf.block.show()方法也不出现遮罩层。但是如果把async设置为true后可以弹出遮罩层。


二、问题分析

  1. 对于async:true也就是异步请求,框架自带的doPost会自己加上遮罩层。(可以通过配置showBlock属性为取消)

  2. 对于async:false同步请求,因为GUI渲染线程与JS引擎线程是互斥的,所以此时渲染线程被阻塞导致遮罩的样式没有被加载出来。而直接设置ajax请求为异步的时候,浏览器会新开一个线程来执行,当然回调的时候还是js的单线程性。只是此时GUI渲染线程不会被阻塞。


三、解决方式

  • 还是用ajax的异步请求。将之前的ajax后代码逻辑统一放到ajax的sucess回调函数中,或者使用deferred对象

  • 自己创建一个遮罩层的dom默认隐藏,当调用jquery的show方法显示出来时,使用回调函数处理。

  • $("#mask").show(function(){    //显示遮罩层,在回调中执行ajax
            $.ajax({
                url:"xxxx",
                async:false,        //同步
                success:function(res){
                    $("#mask").hide();    //隐藏遮罩层
                }
            })
            
            
        });




wafBlock阻塞控件和AJAX同步请求一起使用遮罩层不显示的问题

一、问题场景 使用waf.doPost请求设置async:false后不出现遮罩层,自己加上waf.block.show()方法也不出现遮罩层。但是如果把async设置为...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息