Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
E和FierFox瀏覽器對于這裝載同域的XML文件和裝載XML字符串這兩種情況,分別有各自的處理方式。IE的解析器支持XML文件和XML字符串的加載,而火狐瀏覽器使用單獨的解析器把XML載入內存,然后轉換為可通過JS訪問的XML DOM對象。
以下是js代碼:
/* * 封裝IE和Firefox類瀏覽器中裝載同域XML或XML字符串的方法, * @param flag true表示裝載XML的文件,false表示裝載XML的字符串 * @param xmldoc flag為true表示XML文件的路徑,flag為false表示XML字符串 */ function loadXML(flag,xmldoc){ if(window.activeXObject) { //IE瀏覽器 //創建空的XML對象 var activexName = ["MSXML2.DOMDdcument","Miscrosoft.XmlDom"]; var xmlObj; for(var i = 0; i < actviexName.length;i++){ try{ xmlObj = new ActiveXObject(activeName[i]); break; }catch(e){ } } if(xmlObj){ //同步方式裝載XML數據,確保在文檔完全加載之前解析器不會繼續腳本的執行 xmlObj.async = false; if(flag){ //load用于加載文件,loadXML用于加載字符串 //裝載XML文件 xmlObj.load(xmldoc); }else{ //裝載XML的字符串 xmlObj.loadXML(xmldoc); } //返回根節點 return xmlObj; //返回根元素節點 return xmlObj.documentElement; }else{ alert("裝載XML文檔的對象創建失敗"); return null; } }else if(document.implementation.creatDocument){ //針對Firefox類瀏覽器 var xmlObj; if(flag){ //裝載XML文件 //先創建一個空的xml dom對象 xmlObj = document.implementation.creatDocument("","",null); if(xmlObj){ //同步方式進行裝載 xmlObj.async = false; xmlObj.load(xmldoc); return xmlObj.documentElement; }else{ alert("裝載XML文檔的對象創建失敗"); return null; } }else{ //裝載XML的字符串 //創建一個dom解析器 xmlObj = new DOMParser(); //把xml字符串解析成要返回的dom對象 var docRoot = xmlObj.parerFromString(xmldoc,"test/xml"); return docRoot.documentElement; } } alert("裝載XML文檔的對象創建失敗"); return null; }
html代碼
<html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="load.js"></script> <script type="text/javascript"> function test(){ //裝載同域的XML文件 var domxml1 = loadXML(true,"test.xml"); //裝載XML字符串 var domxml2 = loadXML(true,"<xml>123</xml>"); alert(""); } </script> </head> <body> <input type="button" value="test" onclick="test()"/> </body> </html>
XML頁內容
<?xml version="1.0" encoding="UTF-8"?> <root> 木子松就是我,我就是木子松 </root>
總結
對于裝載同域的XML文件,IE瀏覽器和火狐類瀏覽器都是先創建一個空的XML文檔對象,然后用“xmlDoc.load(“**.xml”)”告知解析器加載名為**.xml的XML文檔
對于裝載XML字符串,IE瀏覽器和裝載XML文件的方式一樣,利用微軟內建的解析器加載XML字符串;而火狐類瀏覽器,則是通過"var parser = new DOMParser()"創建dom解析器,然后利用方法parserFromString()加載 XML字符串。另外DOMParser對象的load()方法可用于加載文件。
跨域訪問處于安全方面的原因,現在的瀏覽器不允許跨域訪問。如果想跨域訪問,則必須把XML文件放到自己的服務器上,否則,xmlDoc.load()將產生錯誤“Access is denied”。
1.通過NuGet安裝dll(2種方法)
1.1可以在Visual Studio中打開“解決方案資源管理器”,鼠標右鍵點擊“引用”,“管理NuGet包”,然后搜索“Free Spire.Doc”,點擊“安裝”。等待程序安裝完成。
1.2將以下內容復制到PM控制臺安裝:
Install-Package FreeSpire.Doc -Version 10.2
2.手動添加dll引用
可通過手動下載包到本地,然后解壓,找到BIN文件夾下的Spire.Doc.dll。然后在Visual Studio中打開“解決方案資源管理器”,鼠標右鍵點擊“引用”,“添加引用”,將本地路徑BIN文件夾下的dll文件添加引用至程序。
轉換時,可參考如下代碼來進行:
C#
using Spire.Doc;
namespace HTMLtoXML
{
class Program
{
static void Main(string[] args)
{
//創建Document類的對象
Document doc = new Document();
//加載html文件
doc.LoadFromFile("sample.html",FileFormat.Html);
//保存為XML格式
doc.SaveToFile("HTMLtoXML.xml", FileFormat.Xml);
System.Diagnostics.Process.Start("HTMLtoXML.xml");
}
}
}
轉換效果:
—End—
MLHTTPrequest 對象
Ajax 的核心是 JavaScript 對象 XmlHTTPRequest。該對象在 Internet Explorer 5 中首次引入,它是一種支持異步請求的技術。簡而言之,XmlHTTPRequest 使您可以使用 JavaScript 向服務器提出請求并處理響應,而不阻塞用戶。通過 XMLHTTPRequest 對象,Web 開發人員可以在頁面加載以后進行頁面的局部更新。
方法
open(String method,String url,boolean asynch,String username,String password)
send(content)
setRequestHeader(String header,String value)
getAllResponseHeaders()
getResponseHeader(String header)
abort()
常用詳細解析
open():該方法創建 HTTP 請求
第一個參數是指定提交方式(post、get)
第二個參數是指定要提交的地址是哪
第三個參數是指定是異步還是同步(true 表示異步,false 表示同步)
第四和第五參數在 HTTP 認證的時候會用到,是可選的。
setRequestHeader(String header,String value):設置消息頭(使用 post 方式才會使用到,
get 方法并不需要調用該方法)。
xmlHTTP.setRequestHeader("Content-type","application/x-www-form-urlencoded");
send(content):發送請求給服務器
如果是 get 方式,并不需要填寫參數,或填寫 null,如果是 post 方式,把要提交的參數寫上去。
常用屬性
onreadystatechange:請求狀態改變的事件觸發器(readyState 變化時會調用此方法),一般用于指定回調函數。
readyState:請求狀態 readyState 一改變,回調函數被調用,它有 5 個狀態:
0:未初始化
1:open 方法成功調用以后
2:服務器已經應答客戶端的請求
3:交互中。HTTP 頭信息已經接收,響應數據尚未接收。
4:完成。數據接收完成
responseText:服務器返回的文本內容
responseXML:服務器返回的兼容 DOM 的 XML 內容
status:服務器返回的狀態碼
statusText:服務器返回狀態碼的文本信息
回調函數是什么
回調函數就是接收服務器返回的內容!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。