关键词:Extjs,Ajax,成功的回调函数,Window,ShowmodelDialog,
问题描述:对话框在正常情况下可以弹出,但是在ajax的返回函数中无法弹出,js报错:对象找不到,未声明等;
(1).网友提供一解决办法,未来得及尝试,不确定可以与否
设置IE浏览器
1,工具--internet选项--安全---可信站点--添加当前站点为可信站点
2,返回来选中可信站点--选择自定义级别-在弹出的安全设置框中找到--允许有脚本初始化的窗口,不受大小和位置限制--选择启动
不过此种解决方案并不是最优方案,我们不可能让每个用户去设置自己的浏览器,很不合理,并不能把用户当做开发人员来看待
(2).我自己尝试了一种解决方案,我觉得还可以,ajax在执行的时候js代码会增加一个线程,也就是说并非按照我们程序的顺序去执行了,那么我们想办法让它按顺序执行不就解决了吗?呵呵,,对吧,不过你可能想到让程序sleep一会,但是不能这样做,这样只是自己欺骗自己罢了,我们可以还是使用ajax,不过我们不使用异步的ajax,呵呵,,使用同步ajax不就解决问题了吗?基本代码如下
var paramsStr = "projectId="+record.get("ProjectID")+"&jobId="+record.get("JobTaskId")+"&type="+
this.WinType+"&taskId="+record.get("JobID")+"&=jobExecHost"+record.get("JobExecHost");
varurlStr = jm_hj_WebContext + "/historyjob/dataGatherAction.action";
/**
*同步ajax
*/
varobj; var value;
if (window.ActiveXObject) {
obj = new ActiveXObject('Microsoft.XMLHTTP');
} else if (window.XMLHttpRequest) {
obj = new XMLHttpRequest();
}
obj.open('POST', urlStr, false);
obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
obj.send(paramsStr);
var rest =Ext.util.JSON.decode(obj.responseText);
if(rest.result== "success"){
var vReturnValue =window.showModalDialog("/jm_dky_pm/dkyprojectmanagement/browseSystemFile.action",null,"dialogWidth=400px;dialogHeight=440px");
if(vReturnValue!= undefined ){
varlocaltext = vReturnValue;
getFileByWinscp("root","sugon123", ip, rest.info, localtext, true);
Ext.MessageBox.alert("提示:", "文件保存路径为:"+localtext);
}
}else{
Ext.MessageBox.alert("提示:", "操作失败");
}
(3).其实可以弹出框的问题都可以通过,div+iframe来解决,不过此法感觉比较麻烦,就不在此详述了,有兴趣可以自己尝试一下,
注:具体在ajax的回调函数中为什么不能使用使用window.showmodeldialog(),真正的原因我现在也未能明确,具传有可能是在回调函数中也定义了类似:window.showmodeldialog(),window.open(),此类的函数,原因有待确认,望知道的相告!