2010-03-16 3 views
1

У меня есть JavaScript, который делает это (HTTP вашего объект XMLHttpRequest)Ответ IEXML.getElementsByTagName() не может обрабатывать неанглийский символ?

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

вопроса является переменным г всегда пустой список, если ответ содержит не английский характер (r.length 0).

Заголовок ответа правильно установить Content-Type: текст/XML, кодировка = 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

Вы сказали, что заголовок ответа был правильно установлен, но это не так. Вы отбывал документ 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.

+3

Кроме того, вы * являетесь * служащим документом ISO-8859-1, а декларация ' bobince

+0

@bobince: звук совет, спасибо за добавление. –

Смежные вопросы