当Ext.LoadMask遇到async : false

pzmyangkong 2012-12-20 09:11:19
使用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也显示出来
...全文
371 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
1667 2014-06-30
  • 打赏
  • 举报
回复
当不使用async : false时,Ext.LoadMask在任一浏览器中显示效果,当加上async : false,Ext.LoadMask只在火狐中显示效果,其它浏览器不显示加载效果,请问,如何使用async : false,但Ext.LoadMask也显示出来
1667 2014-06-30
  • 打赏
  • 举报
回复
解决了吗?解决了吗?解决了吗?
跑跑跳跳噢 2014-03-13
  • 打赏
  • 举报
回复
来来,我来教你,你只要把Ext.Ajax.request({});这一段放进 Ext.getBody().mask("请稍候..."); setTimeout(function () { Ext.Ajax.request({}); },1000); Ext.getBody().unmask(); 这里面。原因的话可能就是在同步请求后页面不能交互了,遮罩层效果还没出来
madStone_l 2012-12-20
  • 打赏
  • 举报
回复
楼主,你的代码可以不用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配置
鸡肋啊 2012-12-20
  • 打赏
  • 举报
回复
这个不大可能吧;“使用async : false,但Ext.LoadMask也显示出来 ”相当于你现在的要求是回调函数和你调后台函数同步执行。
pzmyangkong 2012-12-20
  • 打赏
  • 举报
回复
引用 2 楼 madStone_l 的回复:
楼主,你的代码可以不用async : false 和 Ext.LoadMask 这样个人觉得性能不高。它会创建Dom节点。 比如可以改为这样。 JavaScript code?12345678910Ext.Msg.wait('正在提交数据……', '请稍候', { animate : true ……
这个方式在IE下也不显示
pzmyangkong 2012-12-20
  • 打赏
  • 举报
回复
引用 1 楼 liukewengx 的回复:
这个不大可能吧;“使用async : false,但Ext.LoadMask也显示出来 ”相当于你现在的要求是回调函数和你调后台函数同步执行。
我要的就是同步执行的,同步的时候就是Ext.LoadMask显示不出来,想要的效果是请求前显示Ext.LoadMask,请求完成后,就隐藏,并且返回想要的结果值给其调用的方法,不同步的话,其结果不是请求后的结果哦
pzmyangkong 2012-12-20
  • 打赏
  • 举报
回复
引用 2 楼 madStone_l 的回复:
楼主,你的代码可以不用async : false 和 Ext.LoadMask 这样个人觉得性能不高。它会创建Dom节点。 比如可以改为这样。 JavaScript code?12345678910Ext.Msg.wait('正在提交数据……', '请稍候', { animate : true ……
用的就是Ext4,async是可用的,同步请求已经成功了,因为我要在请求成功之后获取其结果值,再返回其结果,所以一定要async,不然返回结果不是请求成功后的结果的,完整代码如下
function changeVersion(tree, newRecord, oldRecord){
	//debugger;
	var versionId = tree.getSelectionModel().getSelection()[0].get('nodeValue');
	var roleId = Ext.get("roleId").getValue();
	var changeMask = new Ext.LoadMask(Ext.getBody(), {
		msg    : "Changing, please wait..."
	});
	changeMask.show();
	var msgDiv = jQuery("#msgContent");
	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();
			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");
					oldRecord = newRecord;
				} else {
					msgDiv.attr("style", "color:red");
					msgDiv.html("Change version failed");
				}
				// 切换版本消息框5秒后逐渐消失
				msgDiv.fadeOut(5000);							
			}
		}
	}
	Ext.Ajax.request(requestConfig);
	return oldRecord;
};

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧