Итак, вот что я нахожу загадочным.
Я работаю над Javascript, который должен анализировать данные XML, и я использую $ .ajax jQuery для получения и анализа данных. Он отлично работает везде, кроме случаев, когда я тестирую с Internet Explorer 8 (это может быть проблемой на 7 и 9 тоже). В IE я получаю ошибки разбора. Я установил console.log для проверки заголовков HTTP. Вот что я получаю от Chrome на Windows XP и что я получаю от IE -
Chrome:
Date: Sat, 09 Apr 2011 16:06:24 GMT
Connection: Keep-Alive
Content-Length: 2283
Last-Modified: Sat, 09 Apr 2011 15:59:12 GMT
Server: Apache/2.2.14 (Ubuntu)
ETag: "48048-8eb-4a07e6c693400"
Content-Type: application/xml
Accept-Ranges: bytes
Keep-Alive: timeout=15, max=97
IE8:
LOG: ETag: "48048-8eb-4a07d7a3cbe40"
Keep-Alive: timeout=15, max=97
Content-Type: text/html
Content-Length: 2283
Last-Modified: Sat, 09 Apr 2011 14:51:29 GMT
Вот как выглядит XML-документ:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
</root>
Я проверил настройку MIME для моего сервера Apache, и он настроен на отправку файлов xml в виде «application / xml». Поэтому странно отправлять контентный тип application / xml в Chrome, но IE получает контентный тип text / html.
Итак, я построил простой PHP-скрипт:
<?php
header('Content-type: application/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<root>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
</root>
Когда я изменяю Javascript для получения PHP вместо XML-файла, я получаю эти заголовки ответа -
Chrome с PHP:
Date: Sat, 09 Apr 2011 16:10:39 GMT
X-Powered-By: PHP/5.2.10-2ubuntu6.7
Connection: Keep-Alive
Content-Length: 2102
Server: Apache/2.2.14 (Ubuntu)
Content-Type: application/xml; charset=UTF-8
Keep-Alive: timeout=15, max=97
IE с PHP:
LOG: X-Powered-By: PHP/5.2.10-2ubuntu6.7
Content-Length: 2102
Keep-Alive: timeout=15, max=100
Content-Type: application/xml; charset=UTF-8
Итак, насколько я могу судить, с моим ограниченным знанием Apache кажется, что необработанный XML-файл отправляется без нужного типа контента только в IE, даже если я настроил его для отправки 'application / xml'. Chrome получает правильный тип контента. Когда я использую PHP, Apache, похоже, следует моим пожеланиям и отправляет «application / xml», потому что это то, что я пометил, как в сценарии. Также странно, что в IE нет тех же заголовков, что и в Chrome? «Сервер» отсутствует, например.
Так что же может помешать и изменить 'application / xml' на 'text / html' только для Internet Explorer? Я бы не хотел полагаться на PHP-скрипт для вывода моих XML-данных. Я думал о mod-deflate, но отключил его, и результаты те же.
Есть идеи?
(PS - включаемый мной XML - просто пример, поэтому длины содержимого не совпадают)