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(),此類的函數,原因有待確認,望知道的相告!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章