Проблемы синтаксического анализа XML с помощью jQuery в IE6 - PullRequest
1 голос
/ 22 декабря 2009

Я пытаюсь извлечь значения из xml, используя jQuery, кросс-браузерно-совместимым способом. У меня нет проблем с этим в Firefox, но, к сожалению, это также должно быть совместимо с IE.

Мой код jQuery выглядит так:

$(document).ready(function()) {
  $.get("file.xml", {}, function(parseRefreshTime){
    alert('This line is executed in IE.');  
    $("created", parseRefreshTime).each(function() {
      alert('This line is *not* executed in IE.');  
      refreshTime = $(this).text();
      //do stuff with refreshtime
    });
  });
});

Это извлекает значение узла для <created> узла в моем XML-файле.

Я ссылаюсь на библиотеку jQuery на моей странице, и она правильно анализирует в Firefox, поэтому я предполагаю, что мой код синтаксического анализа является подходящим. Я получаю оба оповещения в Firefox, но только первое в IE.

Могу поклясться, что вчера у меня работал очень похожий код, но я, должно быть, что-то подправил и каким-то образом сломал. Поработав с ним почти час, я ищу другой набор глаз.

Кто-нибудь может заметить, что я здесь делаю неправильно?

Ответы [ 5 ]

4 голосов
/ 08 января 2010

Несколько вещей:

  • Укажите тип ответа xml для вашего запроса AJAX
  • Оберните возвращаемый объект XML в $(doc) и используйте find для запроса XML
  • Я думаю, у вас есть несколько опечаток в первой строке: reader должно быть ready и у вас есть дополнительные закрывающие скобки

Это работает для меня на IE6. Если это не работает для вас, возможно, вы захотите выяснить, правильно ли вы обслуживаете свой XML.

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Test</title>

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
  <script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
      $.get("test.xml", null, function(doc) {
        $(doc).find('created').each(function() {
          alert($(this).text());
        })
      }, 'xml');
    });
  </script>
</head>
<body>

</body>
</html>

test.xml :

<?xml version="1.0" encoding="UTF-8"?>
<created>2010-01-07 00:00:00</created>
2 голосов
/ 22 декабря 2009

попытаться обернуть parseRefreshTime с $()

    $("created", $(parseRefreshTime)).each(function() {
      alert('This line is *not* executed in IE.');  
      refreshTime = $(this).text();
      //do stuff with refreshtime
    });

или попробуйте использовать $(parseRefreshTime).find('created')

    $(parseRefreshTime).find("created").each(function() {
      alert('This line is *not* executed in IE.');  
      refreshTime = $(this).text();
      //do stuff with refreshtime
    });

Последнее обновление: также попробуйте указать от type до xml.

$.get("file.xml", {}, <callback>, "xml")
1 голос
/ 22 декабря 2009

Убедитесь, что text / xml используется как тип содержимого для файла xml.

0 голосов
/ 12 января 2010

Одной из самых больших проблем с XML и IE6 является кодировка символов. Убедитесь, что ваш браузер может правильно интерпретировать файл. Вполне возможно, что ваш веб-сервер обслуживает страницу с другим заголовком кодировки по сравнению с самим документом.

0 голосов
/ 11 января 2010

Я использую что-то вроде этого:

    if ($.browser.msie){
        var tempXML = new ActiveXObject("Microsoft.XMLDOM");
        tempXML.async = false;
        tempXML.loadXML(data);
        xmlc = tempXML;
        items = $($(xmlc)[0]);
    } else if(window.DOMParser){
        items = $(new DOMParser().parseFromString(data, "text/xml").childNodes[0]);
    } else {
        xmlc = data;
        items = $($(xmlc)[1]);
    }

По сути, попробуйте Microsoft.XMLDOM для IE. Можете ли вы предоставить образец XML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...