/* * 解決ajax返回的頁面中含有javascript的辦法: * 把xmlHttp.responseText中的腳本都抽取出來,不管AJAX加載的HTML包含多少個腳本塊,我們對找出來的腳本塊都調用eval方法執行它即可 */ function executeScript(html) { var reg = /<script[^>]*>([^\x00]+)$/i; //對整段HTML片段按<\/script>拆分 var htmlBlock = html.split("<\/script>"); for (var i in htmlBlock) { var blocks;//匹配正則表達式的內容數組,blocks[1]就是真正的一段腳本內容,因為前面reg定義我們用了括號進行了捕獲分組 if (blocks = htmlBlock[i].match(reg)) { //清除可能存在的注釋標記,對於注釋結尾-->可以忽略處理,eval一樣能正常工作 var code = blocks[1].replace(/<!--/, ''); try { eval(code) //執行腳本 } catch (e) { } } } } /* * 利用div實現左邊點擊右邊顯示的效果(以id="content"的div進行內容展示) * 注意: * ①:js獲取網頁的地址,是根據當前網頁來相對獲取的,不會識別根目錄; * ②:如果右邊加載的內容顯示頁里面有css,必須放在主頁(即例中的index.jsp)才起作用 * (如果單純的兩個頁面之間include,子頁面的css和js在子頁面是可以執行的。 主頁面也可以調用子頁面的js。但這時要考慮頁面中js和渲染的先后順序 ) */ function showAtRight(url) { var xmlHttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlHttp=new XMLHttpRequest(); //創建 XMLHttpRequest對象 } else { // code for IE6, IE5 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlHttp.onreadystatechange=function() { //onreadystatechange — 當readystate變化時調用后面的方法 if (xmlHttp.readyState == 4) { //xmlHttp.readyState == 4 —— finished downloading response if (xmlHttp.status == 200) { //xmlHttp.status == 200 —— 服務器反饋正常 document.getElementById("content").innerHTML=xmlHttp.responseText; //重設頁面中id="content"的div里的內容 executeScript(xmlHttp.responseText); //執行從服務器返回的頁面內容里包含的JavaScript函數 } //錯誤狀態處理 else if (xmlHttp.status == 404){ alert("出錯了☹ (錯誤代碼:404 Not Found),……!"); /* 對404的處理 */ return; } else if (xmlHttp.status == 403) { alert("出錯了☹ (錯誤代碼:403 Forbidden),……"); /* 對403的處理 */ return; } else { alert("出錯了☹ (錯誤代碼:" + request.status + "),……"); /* 對出現了其他錯誤代碼所示錯誤的處理 */ return; } } } //把請求發送到服務器上的指定文件(url指向的文件)進行處理 xmlHttp.open("GET", url, true); //true表示異步處理 xmlHttp.send(); }