IE的responseXML.getElementsByTagName()无法处理非英文字符?

时间:2010-03-16 06:53:57

标签: javascript

我有一个javascript来执行此操作(http是您的XMLHttpRequest对象)

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

问题是变量如果响应包含非英文字符(r.length为0),则r始终为空列表。

正确设置了响应标头 Content-Type:text / xml; charset = ISO-8859-1

这就是来自网络服务器的响应

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

仅在IE(IE6和IE8)中发生,适用于Firefox和Chrome。 如果项目仅包含英文字符,则工作正常。

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

您说响应标头已正确设置,但事实并非如此。您正在提供UTF-8文档,因此它应该是:

  

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

IE从字面上理解内容类型标题可能存在问题。我不能说我遇到过这个问题,但我不使用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