我有一个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。 如果项目仅包含英文字符,则工作正常。
有解决方法吗?
答案 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。