2010-03-16 31 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