日期:2014-05-16  浏览次数:20366 次

当Ext.LoadMask遇到async : false
使用Ext.LoadMask,ajax用同步请求时,不显示


var changeMask = new Ext.LoadMask(Ext.getBody(), {
msg    : "Changing, please wait..."
});
changeMask.show();

var requestConfig = {
url :'common/changeDatabase!changeDatabase.action',
method: 'POST',
params : {
versionId: versionId,
roleId: roleId,
versionName: newRecord.get("text")
},
async : false,
callback : function(options, success, response){
changeMask.hide();
changeMask.destroy();
//debugger;
var changeDbResult = Ext.JSON.decode(response.responseText);
if(changeDbResult && changeDbResult.result){
if(changeDbResult.result == 'success'){
msgDiv.attr("style", "color:green");
msgDiv.html("Change version success");
} else {
msgDiv.attr("style", "color:red");
msgDiv.html("Change version failed");
}
msgDiv.fadeOut(5000);
}
}
}
Ext.Ajax.request(requestConfig);

当不使用async : false时,Ext.LoadMask在任一浏览器中显示效果,当加上async : false,Ext.LoadMask只在火狐中显示效果,其它浏览器不显示加载效果,请问,如何使用async : false,但Ext.LoadMask也显示出来

------解决方案--------------------
这个不大可能吧;“使用async : false,但Ext.LoadMask也显示出来
”相当于你现在的要求是回调函数和你调后台函数同步执行。
------解决方案--------------------
楼主,你的代码可以不用async : false 和 Ext.LoadMask 这样个人觉得性能不高。它会创建Dom节点。
比如可以改为这样。

Ext.Msg.wait('正在提交数据……', '请稍候', {
animate : true
});
Ext.Ajax.request({
callback?:fucntion(){
   Ext.Msg.hide();
   -- 自己的其他业务代码
}
-- 其他业务代码
});


不知楼主用的那个Ext的版本,据我所知Ext3.x和4.x中的Ajax都没有async配置