2010-06-25 69 views
1

我正在構建一個用於觸摸屏信息亭的單頁HTML頁面。我有一個名爲data.xml的外部XML文件,它位於與我的HTML頁面相同的目錄中。我能夠使用jQuery加載外部XML文件,解析它並在頁面加載時動態構建一些HTML,而不會在Firefox和Chrome中出現任何問題。 但後來我在Internet Explorer中嘗試了它...如何使用jQuery從Internet Explorer中的本地XML文件查詢XML元素?

XML文檔使用$ .ajax()函數加載得很好。我做了一個alert(xmlDoc.text()),它顯示了XML文檔的所有文本內容。所以這不是問題。

我做了一些搜索,發現a StackOverflow answer如果您從Web服務器提供XML,則可以解決問題。它基本上聲明爲了使Internet Explorer將xml字符串視爲xml,需要以下HTTP HEADER。

content-type:application/xml;charset=utf-8

此HTML頁面需要只是運行的Internet Explorer中一個獨立的頁面。 我們不會在自助終端機上運行Web服務器

我的問題是在jQuery中加載本地資源時是否有任何方式指定正確的內容類型?

下面是相關的Ajax代碼,我有工作...

$.ajax({ 
    url: 'data.xml', 
    async : false, 
    success : function(response) { 
    xml = $(response); 
    } 
}); 

// Following line works in Firefox/Chrome, but not in Internet Explorer 
var firstItemText = $("item:first", xml).text(); 

編輯:我添加了一個錯誤處理功能上,像這樣的AJAX請求......

$.ajax({ 
    url: 'data.xml', 
    async : false, 
    dataType : "xml", 
    success : function(response) { 
    xml = $(response); 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert('Data Could Not Be Loaded - '+ textStatus); 
    } 
}); 

此功能在Internet Explorer中觸發,產生的消息爲:

Data Could Not Be Loaded: - parsererror

我用幾個在線XML驗證器工具檢查了我的XML文檔,它沒有錯誤。

任何幫助表示讚賞。

回答

4

一些測試我設法後讓它起作用。

問題是當您在本地加載XML文件時,Internet Explorer收到的數據是純文本而不是text/xml。

解決的辦法是:

$.ajax({ 
    url: 'data.xml', 
async : false, 
dataType: ($.browser.msie) ? "text" : "xml", 
success : function(response) 
{ 
    if (typeof response == "string") 
    { 
     xml = new ActiveXObject("Microsoft.XMLDOM"); 
    xml.async = false; 
    xml.loadXML(response); 
    } 
    else 
     xml = $(response); 
    }, 

error: function(XMLHttpRequest, textStatus, errorThrown) 
    { 
    alert('Data Could Not Be Loaded - '+ textStatus); 
} 
}); 

var firstItemText = $("item:first", xml).text(); 

你可以看到完整的解釋在這個環節:

http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

我很高興,如果我的幫助。

+1

那釘在頭上!感謝菲利普! – jessegavin 2010-06-25 19:02:19

1

試圖改變自己的內容類型:

 
content-type:text/xml;charset=utf-8 

而且不要忘記在XML文件中加入這一行(必須是第一行)

<?xml version="1.0" encoding="utf-8"?> 
+0

你在哪裏建議我改變內容類型?我沒有從Web服務器提供XML文件。我將嘗試XML聲明。 – jessegavin 2010-06-25 18:12:21

+0

我添加了XML聲明,並得到了相同的結果。 – jessegavin 2010-06-25 18:13:47