extjs ajax返回函数中调用window.showmodeldialog()对话框问题详解

关键词: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(),此类的函数,原因有待确认,望知道的相告!


你可能感兴趣的:(Ajax,浏览器,REST,脚本,XMLhttpREquest,ExtJs)