我有一个面板,点击一个按钮我正在调用Ajax。在firefox上我可以在面板上看到loadmask但是在chrome上它无法正常工作。即使我在Ajax调用之前创建了一个单独的mask对象,但它只在Ajax调用完成后显示。我可以使用浏览器javascript控制台显示/隐藏掩码,但是当Ajax调用运行我的Ajax调用同步时,它不能正常工作。并仅限铬问题。
jsfiddle.net/naveen_ramawat/6d7pyohL/2 /
答案 0 :(得分:4)
为全身使用面膜
Ext.getBody().mask('your message');
在ajax调用和使用之前,
Ext.getBody().unmask();
内部ajax成功
更新了jsfiddle- http://jsfiddle.net/yq8e7na8/3/
(在asynchronos ajax调用之前设置超时)
答案 1 :(得分:2)
请尝试使用此代码:
panel = Ext.getCmp('panel');
var myMask = new Ext.LoadMask(panel , {msg:"Loading..."});
myMask.show();
然后你可以隐藏在成功的回调函数中:
myMask.hide();
答案 2 :(得分:2)
这就是事情:
我的Ajax调用是同步的。并仅限铬问题
已弃用同步AJAX,Chrome实际上已does not process it anymore,在控制台中显示此警告:
主线程上的同步XMLHttpRequest因不推荐使用 它对最终用户的体验产生不利影响。如需更多帮助, 检查http://xhr.spec.whatwg.org/。
使用异步AJAX。
更新:
Chrome实际上似乎处理了同步AJAX请求,但显示负载掩码失败。看起来,与Firefox不同,Chrome在移动到下一段JavaScript代码之前不会等待接口实际呈现掩码。而且因为下一位是同步AJAX调用,冻结所有内容,然后是myMask.hide()
- 我们永远不会看到掩码。
要在Chrome中查看遮罩,您可以在myMask.show();
之后稍微延迟(在我的机器上足够1毫秒):
handler(){
var myMask = new Ext.LoadMask(mypanel , {msg:"Loading..."});
myMask.show();
setTimeout(function(){
Ext.Ajax.request({
url: '/echo/js/?delay=5&js=',
method: 'GET',
async: false
});
console.log('hiding mask');
myMask.hide();
}, 1);
}
在延迟期间,在浏览器冻结进行同步AJAX调用之前渲染掩码。 工作小提琴:http://jsfiddle.net/6d7pyohL/4/
答案 3 :(得分:0)
var myMask = new Ext.LoadMask(Ext.getBody(),{msg:"please wait..."});
$(document).ajaxStart(function(){
myMask.show();
});
$(document).ajaxComplete(function(){
myMask.hide();
});
jQuery.ajax({
url:"abc.php",
async:true,
type:"POST",
success:function(data){
}
});
而不是async:false,请使用 async:true