2010-03-16 60 views
1

我有一個JavaScript做這個(HTTP是你的XMLHttpRequest對象)IE的responseXML.getElementsByTagName()無法處理非英文字符?

var r = http.responseXML.getElementsByTagName('item'); 

的問題是變量r始終是一個空列表如果響應包含非英語字符(r.length爲0)。

的響應頭設置正確 內容類型:文本/ XML的,字符集= ISO-8859-1

這是來自Web服務器的響應看起來像

<?xml version='1.0' encoding='UTF-8'?> 
<d> 
    <r> 
    <item value="jmob" label="John Möb"/> 
    </r> 
</d> 

它只發生在IE(IE6和IE8)中,可以在Firefox和Chrome中使用。 如果項目只包含英文字符,它工作正常。

是否有解決方法?

回答

1

你說響應標題設置正確,但不是。你服UTF-8的文件,所以它應該是:

Content-Type: text/xml;charset=UTF-8

有可能是與IE服用content-type標題字面上的問題。我不能說我遇到過這個問題,但我不使用getElementsByTagName,因爲它不適用於命名空間。你可以使用selectSingleNode()selectNodes()代替:

// Using recursive descent (//) to find all item nodes 
var r = http.responseXML.documentElement.selectNodes("//item"); 

// Specifying the exact path to the item nodes 
var r = http.responseXML.documentElement.selectNodes("r/item"); 

的XPath給你更多的權力比getElementsByTagName。你甚至可以發現,使用正確的道路,你可以拋棄一個或兩個你的if陳述。有關完整的XPath語法,請參見http://msdn.microsoft.com/en-us/library/ms256471(VS.85).aspx

+3

或者,您*正在提供ISO-8859-1文檔,並且<?xml'聲明在說謊!通常HTTP頭文件中聲明的「charset」應該是「勝利」的,但你肯定不希望提供具有衝突字符集信息的XML。真的,你不想用UTF-8以外的任何東西來提供XML。 – bobince 2010-03-16 12:43:00

+0

@bobince:合理的建議,謝謝你的加入。 – 2010-03-16 13:26:21