Как запросить XML-элементы из локального XML-файла в Internet Explorer, используя jQuery? - PullRequest
1 голос
/ 25 июня 2010

Я создаю одну HTML-страницу для использования в сенсорном киоске.У меня есть внешний XML-файл с именем data.xml, который находится в том же каталоге, что и моя HTML-страница.Я смог использовать jQuery для загрузки внешнего XML-файла, его синтаксического анализа и динамического построения HTML-кода при загрузке страницы без каких-либо проблем в Firefox и Chrome. Но затем я попробовал это сделать в Internet Explorer ...

Документ XML загружается очень хорошо, используя функцию $ .ajax ().Я сделал alert(xmlDoc.text()), и он показал все текстовое содержимое документа XML.Так что это не проблема.

Я провел поиск и нашел ответ StackOverflow , который дает решение проблемы, ЕСЛИ вы отправляете XML с веб-сервера.В основном говорится, что следующий HTTP-заголовок необходим для того, чтобы Internet Explorer мог обрабатывать строку xml как xml.

content-type:application/xml;charset=utf-8

Эта HTML-страница должна быть запущена как отдельная страница внутриInternet Explorer. У нас не будет веб-сервера , работающего на машине с киоском.

Мой вопрос: есть ли способ указать правильный тип содержимого при загрузке локального ресурса в jQuery?

Вот соответствующий код ajax, с которым я работаю ...

$.ajax({
  url: 'data.xml',
  async : false,
  success : function(response) {
    xml = $(response);
  }
});

// Following line works in Firefox/Chrome, but not in Internet Explorer
var firstItemText = $("item:first", xml).text();

РЕДАКТИРОВАТЬ: я добавил функцию обработки ошибок в запрос ajax, как это ...

$.ajax({
  url: 'data.xml',
  async : false,
  dataType : "xml",
  success : function(response) {
    xml = $(response);
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    alert('Data Could Not Be Loaded - '+ textStatus);
  }
});

Эта функция запускается в Internet Explorer, и в результате появляется сообщение:

Data Could Not Be Loaded: - parsererror

Я проверил свой документ XML с помощью нескольких онлайн-инструментов проверки XML, и он имеетбез ошибок.

Любая помощь приветствуется.

Ответы [ 2 ]

4 голосов
/ 25 июня 2010

После некоторого тестирования мне удалось заставить его работать.

Проблема заключается в том, что при локальной загрузке файлов XML данные, полученные Internet Explorer, представляют собой обычный текст, а не text / xml.

Решение:

$.ajax({
    url: 'data.xml',
async : false,
dataType: ($.browser.msie) ? "text" : "xml",
success : function(response) 
{
    if (typeof response == "string") 
    {
        xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    xml.loadXML(response);
    } 
    else 
        xml = $(response);
    },

error: function(XMLHttpRequest, textStatus, errorThrown) 
    {
    alert('Data Could Not Be Loaded - '+ textStatus);
}
});

var firstItemText = $("item:first", xml).text();

Полное объяснение вы можете увидеть по этой ссылке:

http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

Я рад, если помог.

1 голос
/ 25 июня 2010

Попробуйте изменить тип контента на:

content-type:text/xml;charset=utf-8

И не забудьте добавить эту строку в ваш XML-файл (должна быть первой строкой)

<?xml version="1.0" encoding="utf-8"?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...