亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

用ajax動態加載需要的js文件

2024-09-01 08:29:37
字體:
來源:轉載
供稿:網友

習慣了用java,在java中,需要某個類直接import就可以了,所以做javascript的時候也想實現這個效果。

  前段時間,用了下dojo,里面的dojo.require的功能很不錯,一看代碼,暈了,一大堆東西,唉~還是自己寫個簡單點的,dojo.require可以引入包,我就只做一個導入js文件的。

  開始用的document.write,執行順序不對了,這是在后面進行導入,而我們總是在前面執行中就需要導入的js,這樣,執行中就會報“某某未定義”,就是順序問題了。

  接著,我就想用ajax同步(注意:不是異步)調用遠程js文件,這里有個問題,就是我們要js文件的時候,不是用絕對路徑,就是相對路徑,用相對路徑的話,以哪個為參照呢?可以用調用js的那個文件為參照,也可以以實現調用功能的js文件為參照,這里,我選擇寫個 js,實現按需調用其它js,參照也選它。經過一番修改,路徑問題解決。但是,讀取過來的數據中文會有亂碼問題,好在我們做東西都用UTF-8(因為要國際化),所以這里避過了。

  遠程js內容取到后,就要執行,用eval執行后,發現還是取不到遠程js里定義的內容,怪了,猛alert一番后,發現執行eval的上下文范圍有問題,我們要的是js在window對象中執行,嗯?window有什么方法沒?一找,哈,有個window.execScript方法,ok,試一下,成功,yeah~后來發現在firefox下,不能用window.execScript,找了一下,用window.eval,用法和ie下的window.execScript類似。但是只用window.eval的時候,在ie下有時候會出問題,所以就兩種一起用了。

  下面是實現遠程js安調用的那個js:env.js,我已經習慣用oo寫js了

 /**  * @author zxub 2006-06-01  * 狀態信息顯示類,用var Status=new function()定義,可以靜態引用其中的方法  * 一般情況下為function Status(),這樣不能靜態引用其中的方法,需要通過對象來引用  */ var Status=new function() {   this.statusDiv=null;      /**    * 初始化狀態顯示層    */   this.init=function()   {     if (this.statusDiv!=null)     {       return;     }     var body = document.getElementsByTagName("body")[0];     var div = document.createElement("div");     div.style.position = "absolute";     div.style.top = "50%";     div.style.left = "50%";     div.style.width = "280px";     div.style.margin = "-50px 0 0 -100px";         div.style.padding = "15px";     div.style.backgroundColor = "#353555";     div.style.border = "1px solid #CFCFFF";     div.style.color = "#CFCFFF";     div.style.fontSize = "14px";     div.style.textAlign = "center";     div.id = "status";     body.appendChild(div);     div.style.display="none";     this.statusDiv=document.getElementById("status");   }      /**    * 設置狀態信息    * @param _message:要顯示的信息    */     this.showInfo=function(_message)   {        if (this.statusDiv==null)     {       this.init();     }      this.setStatusShow(true);     this.statusDiv.innerHTML = _message;       }       /**    * 設置狀態層是否顯示    * @param _show:boolean值,true為顯示,false為不顯示    */    this.setStatusShow=function(_show)   {        if (this.statusDiv==null)     {       this.init();     }      if (_show)     {       this.statusDiv.style.display="";     }     else     {       this.statusDiv.innerHTML="";       this.statusDiv.style.display="none";     }   } } /**  * @author zxub  * 用于存放通道名稱及通信對象的類,這樣可以通過不同通道名稱來區分不同的通信對象  */ function HttpRequestObject() {   this.chunnel=null;   this.instance=null; } /**  * @author zxub  * 通信處理類,可以靜態引用其中的方法  */ var Request=new function() {   this.showStatus=true;      //通信類的緩存   this.httpRequestCache=new Array();      /**    * 創建新的通信對象    * @return 一個新的通信對象    */   this.createInstance=function()   {     var instance=null;     if (window.XMLHttpRequest)     {       //mozilla       instance=new XMLHttpRequest();       //有些版本的Mozilla瀏覽器處理服務器返回的未包含XML mime-type頭部信息的內容時會出錯。因此,要確保返回的內容包含text/xml信息       if (instance.overrideMimeType)       {         instance.overrideMimeType="text/xml";       }     }     else if (window.ActiveXObject)     {       //IE       var MSXML = ['MSXML2.XMLHTTP.5.0', 'Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];       for(var i = 0; i < MSXML.length; i++)       {         try         {           instance = new ActiveXObject(MSXML[i]);           break;         }         catch(e)         {                   }       }     }     return instance;   }      /**    * 獲取一個通信對象    * 若沒指定通道名稱,則默認通道名為"default"    * 若緩存中不存在需要的通信類,則創建一個,同時放入通信類緩存中    * @param _chunnel:通道名稱,若不存在此參數,則默認為"default"    * @return 一個通信對象,其存放于通信類緩存中    */   this.getInstance=function(_chunnel)   {     var instance=null;     var object=null;     if (_chunnel==undefined)//沒指定通道名稱     {       _chunnel="default";     }     var getOne=false;     for(var i=0; i<this.httpRequestCache; i++)     {       object=HttpRequestObject(this.httpRequestCache[i]);       if (object.chunnel==_chunnel)       {         if (object.instance.readyState==0 || object.instance.readyState==4)         {           instance=object.instance;         }         getOne=true;         break;                 }     }     if (!getOne) //對象不在緩存中,則創建     {       object=new HttpRequestObject();       object.chunnel=_chunnel;       object.instance=this.createInstance();       this.httpRequestCache.push(object);       instance=object.instance;     }          return instance;   }      /**    * 客戶端向服務端發送請求    * @param _url:請求目的    * @param _data:要發送的數據    * @param _processRequest:用于處理返回結果的函數,其定義可以在別的地方,需要有一個參數,即要處理的通信對象    * @param _chunnel:通道名稱,默認為"default"    * @param _asynchronous:是否異步處理,默認為true,即異步處理    */   this.send=function(_url,_data,_processRequest,_chunnel,_asynchronous)   {     if (_url.length==0 || _url.indexOf("?")==0)     {       Status.showInfo("由于目的為空,請求失敗,請檢查!");       window.setTimeout("Status.setStatusShow(false)",3000);       return;     }     if (this.showStatus)     {       Status.showInfo("請求處理中,請稍候");      }     if (_chunnel==undefined || _chunnel=="")     {       _chunnel="default";     }     if (_asynchronous==undefined)     {       _asynchronous=true;     }     var instance=this.getInstance(_chunnel);     if (instance==null)     {       Status.showInfo("瀏覽器不支持ajax,請檢查!")       window.setTimeout("Status.setStatusShow(false)",3000);       return;     }      if (_asynchronous==true && typeof(_processRequest)=="function")     {       instance.onreadystatechange=function()       {         if (instance.readyState == 4) // 判斷對象狀態         {           if (instance.status == 200) // 信息已經成功返回,開始處理信息           {                      _processRequest(instance);             Status.setStatusShow(false);             Request.showStatus=true;                     }           else           {             Status.showInfo("您所請求的頁面有異常,請檢查!");             window.setTimeout("Status.setStatusShow(false)",3000);           }         }       }     }     //_url加一個時刻改變的參數,防止由于被瀏覽器緩存后同樣的請求不向服務器發送請求     if (_url.indexOf("?")!=-1)     {       _url+="&requestTime="+(new Date()).getTime();     }     else     {       _url+="?requestTime="+(new Date()).getTime();     }     if (_data.length==0)     {       instance.open("GET",_url,_asynchronous);            instance.send(null);           }     else     {       instance.open("POST",_url,_asynchronous);       instance.setRequestHeader("Content-Length",_data.length);       instance.setRequestHeader("Content-Type","application/x-www-form-urlencoded");       instance.send(_data);     }     if (_asynchronous==false && typeof(_processRequest)=="function")     {       _processRequest(instance);       if (Request.showStatus)       {         Status.setStatusShow(false);       }       else       {         Request.showStatus=true;       }     }   }      /**    * 間隔一段時間持續發送請求,只用于異步處理,只用于GET方式    * @param _interval:請求間隔,以毫秒計    * @param _url:請求地址    * @param _processRequest:用于處理返回結果的函數,其定義可以在別的地方,需要有一個參數,即要處理的通信對象    * @param _chunnel:通道名稱,默認為"defaultInterval",非必添    */   this.intervalSend=function(_interval,_url,_processRequest,_chunnel)   {     var action=function()     {       if (_chunnel==undefined)       {         _chunnel="defaultInterval";       }       var instance=Request.getInstance(_chunnel);       if (instance==null)       {         Status.showInfo("瀏覽器不支持ajax,請檢查!")         window.setTimeout("Status.setStatusShow(false)",3000);         return;       }       if (typeof(_processRequest)=="function")       {         instance.onreadystatechange=function()         {           if (instance.readyState == 4) // 判斷對象狀態           {             if (instance.status == 200) // 信息已經成功返回,開始處理信息             {               _processRequest(instance);             }             else             {               Status.showInfo("您所請求的頁面有異常,請檢查!");               window.setTimeout("Status.setStatusShow(false)",3000);             }           }         }       }       //_url加一個時刻改變的參數,防止由于被瀏覽器緩存后同樣的請求不向服務器發送請求       if (_url.indexOf("?")!=-1)       {         _url+="&requestTime="+(new Date()).getTime();       }       else       {         _url+="?requestTime="+(new Date()).getTime();       }       instance.open("GET",_url,true);       instance.send(null);     }     window.setInterval(action,_interval);       } } var Env=new function() {     this.funcList=new Array();        this.envPath=null;      this.getPath=function()   {     this.envPath=document.location.pathname;     this.envPath=this.envPath.substring(0,this.envPath.lastIndexOf("/")+1);         var _scripts=document.getElementsByTagName("script");     var _envPath=null;     var _scriptSrc=null;     for (var i=0; i<_scripts.length; i++)     {       _scriptSrc=_scripts[i].getAttribute("src");       if (_scriptSrc && _scriptSrc.indexOf("env.js")!=-1)       {         break;       }     }     if (_scriptSrc!=null)     {       if (_scriptSrc.charAt(0)=='/')       {         this.envPath=_scriptSrc.substr(0,_scriptSrc.length-6);       }       else       {         this.envPath=this.envPath+_scriptSrc.substr(0,_scriptSrc.length-6);       }     }       }   this.getPath();        /**    * 按需獲取需要的js文件    * @param _jsName:js文件路徑,若為相對路徑,則是對應env.js的相對路徑,也可以用絕對路徑    * @param _language:對返回函數進行處理的語言,默認為JScript,可不填    */   this.require=function(_jsName,_language)   {     var _absJsName=null;     if (_jsName.charAt(0)=='/')     {       _absJsName=_jsName;     }     else     {       _absJsName=this.envPath+_jsName;     }         if (!Env.funcList[_absJsName])     {       Env.funcList[_absJsName]="finished";        var processJs=function(_instance)       {         //為兼容firefox做判斷         if (_language!=undefined)         {           if (window.execScript)           {             window.execScript(_instance.responseText,_language);           }           else           {             window.eval(_instance.responseText,_language);           }                             }         else         {           if (window.execScript)           {             window.execScript(_instance.responseText);           }           else           {             window.eval(_instance.responseText);           }                   }               }       Request.showStatus=false;       Request.send(_absJsName,"",processJs,"",false);     }   }      /**    * 該函數的效果是在應用它的script塊后加一個script塊    * 是由document.write在script塊中的執行順序決定的    */   this.getJs=function(_jsName)   {     if (!Env.funcList[_jsName])     {       Env.funcList[_jsName]="finished";       document.write('<scr'+'ipt type="text/javascript" src="'+_jsName+'"></'+'scr'+'ipt>');     }   } } /**  * ajax調用遠程頁面后,遠程頁面中script塊未執行的處理  */ function reloadJs(_language) {   var _c=document.getElementsByTagName("SCRIPT");   for (var i=0;i<_c.length;i++)   {     if (_c[i].src)     {       var _s=document.createElement("script");       _s.type="text/javascript";       _s.src=_c[i].src;       //為兼容firefox不用_c[0].insertAdjacentElement("beforeBegin",_s)       _c[0].parentNode.insertBefore(_s,_c[0]);             _c[i].parentNode.removeChild(_c[i]);     }     else if (_c[i].text)     {       if (_language!=undefined)       {         if (window.execScript)         {           window.execScript(_c[i].text,_language);         }         else         {           window.eval(_c[i].text,_language);         }       }       else       {         if (window.execScript)         {           window.execScript(_c[i].text);         }         else         {           window.eval(_c[i].text);         }       }     }   } }               
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍偷拍一区| 亚洲男人天堂2024| 亚洲人成电影在线| 欧美巨乳在线观看| 高清欧美性猛交| 91久久久久久| 91夜夜揉人人捏人人添红杏| 亚洲视频电影图片偷拍一区| 久久久久久久97| 亚洲成人黄色网址| 亚洲免费一在线| 中文字幕日韩欧美在线视频| 国产精品久久久久久av下载红粉| 国产精品专区第二| 久久精品视频免费播放| 欧美极品美女视频网站在线观看免费| 国产精品白嫩初高中害羞小美女| 亚洲综合最新在线| 中文字幕日韩精品在线观看| 亚洲色图狂野欧美| 美女久久久久久久久久久| 亚洲第一精品电影| 国产精品aaaa| 上原亚衣av一区二区三区| 成人午夜黄色影院| 欧美性视频精品| 超薄丝袜一区二区| 8x海外华人永久免费日韩内陆视频| 久久久久久久91| 深夜精品寂寞黄网站在线观看| 国产一区二区三区在线播放免费观看| 26uuu另类亚洲欧美日本老年| 欧美乱大交xxxxx另类电影| 亚洲成人动漫在线播放| 中文字幕精品一区二区精品| 日韩av免费在线看| 国产精品久久久久久av福利软件| 国产精品欧美一区二区| 日韩国产精品视频| 欧美日韩在线视频一区二区| 久久久久久91| 精品免费在线观看| 欧美一级大片在线免费观看| 国产中文字幕亚洲| 精品国产欧美一区二区三区成人| 欧美激情欧美狂野欧美精品| 7m第一福利500精品视频| 中文字幕在线国产精品| 国产日韩精品在线播放| 日韩的一区二区| 色七七影院综合| 精品久久久久久亚洲精品| 亚洲美女激情视频| 国产精品老女人视频| 美女国内精品自产拍在线播放| 国产精品无av码在线观看| 欧美日韩国产色| 欧美日韩亚洲视频| 中文字幕在线观看日韩| 欧美激情视频三区| 精品国产网站地址| 亚洲国产成人91精品| 粉嫩老牛aⅴ一区二区三区| 国产精品激情自拍| 国产精品久久久久久久久粉嫩av| 国产精品久久久久秋霞鲁丝| 91啪国产在线| 91精品国产91| 欧美激情精品久久久| 欧美激情第三页| 91美女福利视频高清| 亚洲一区二区三区在线视频| 日韩高清av一区二区三区| 国产在线视频一区| 在线观看日韩www视频免费| 久久激情五月丁香伊人| 亚洲精品黄网在线观看| 久久精品国产精品| 国产日韩在线看片| 精品国产一区二区三区久久狼黑人| 久久久久亚洲精品成人网小说| 久久理论片午夜琪琪电影网| 久久精品欧美视频| 欧美激情精品久久久久久| 欧美国产日韩中文字幕在线| 97国产成人精品视频| 国产精品亚洲综合天堂夜夜| 久久成人人人人精品欧| 在线精品高清中文字幕| 国产一区二区在线播放| 久久免费福利视频| 夜夜嗨av一区二区三区四区| 日韩一中文字幕| 亚洲成人免费在线视频| 亚洲一区二区三区毛片| 精品自拍视频在线观看| 亚洲18私人小影院| 精品国产一区久久久| 色av吧综合网| 中文字幕日韩av电影| 欧美国产在线视频| 中文字幕一精品亚洲无线一区| 亚洲天堂色网站| 久操成人在线视频| 91天堂在线视频| 久久精品亚洲精品| 国内免费久久久久久久久久久| 国产97在线|日韩| 欧美视频在线免费看| 国产成人激情小视频| 亚洲一级片在线看| 国产成人精品a视频一区www| 国产精品视频白浆免费视频| 亚洲男人av在线| 日韩av在线网站| 亚洲成人黄色在线观看| 91av在线免费观看| 68精品久久久久久欧美| 国产成人精品av| 91日韩在线视频| 久久频这里精品99香蕉| 亚洲热线99精品视频| 亚洲自拍偷拍视频| 91精品国产九九九久久久亚洲| 日韩免费观看av| 色综合久综合久久综合久鬼88| 国语自产偷拍精品视频偷| 欧美性理论片在线观看片免费| 国内精品小视频在线观看| 亚洲一区制服诱惑| 亚洲国产欧美一区二区三区同亚洲| 欧美在线欧美在线| 亚洲国产精品人久久电影| 欧美另类第一页| 久久国内精品一国内精品| 日韩欧美国产成人| 国产精品电影网| 欧美日韩国产精品| 日韩欧美在线视频免费观看| 亚洲精品少妇网址| 青草热久免费精品视频| 91亚洲精品在线| 亚洲成人黄色在线| 亚洲福利在线观看| 国产精品va在线播放| 亚洲影院污污.| 亚洲欧美日韩天堂| 精品久久久久久亚洲国产300| 欧美性猛交xxxx黑人猛交| 久久久久日韩精品久久久男男| 亚洲欧美在线x视频| 亚洲色图色老头| 亚洲成人av片在线观看| 亚洲黄色有码视频| 国产精品久久视频| 亚洲免费av网址| 少妇激情综合网| 国产91色在线| 国产免费亚洲高清| 欧美伊久线香蕉线新在线| 一本色道久久88精品综合| 日韩av中文字幕在线播放| 九九热这里只有精品免费看| 亚洲欧美成人一区二区在线电影|