IE JQuery ajax parseerror в локальном XML-файле - PullRequest
3 голосов
/ 14 декабря 2010

В IE JQuery выдает мне parseError, когда я пытаюсь прочитать локальный XML-файл. Надеясь, что кто-то сможет это заметить. Код отлично работает в FF

Jquery в вопросе

$.ajax({
    type: "GET",
    url: settings.PresentationLocation,
    dataType: "xml",
    async: false,
    contentType : 'application/xml',
    success: function(xml){
        //Setup the slides
        $(xml).find('slide').each(function(){
            //Create the slide
            obj.append('<div class="slide"><div class="slideTitle">'+ $(this).find('title').text() +'</div><div class="slideContent">'+ $(this).find('content').text() +'</div></div>');
        });

        totalSlides = obj.children('.slide').size();

        //Hide all the slides
        obj.children('.slide').hide();
    },

    error: function(xmlReq, status, errorMsg){
        console.log("Error Message: "+ errorMsg);
        console.log("Status: "+ status);
        console.log(xmlReq.responseText);

        throw(errorMsg);
    }
});

XML-файл

<?xml version="1.0" encoding="UTF-8"?>
<slides>
    <slide>
        <title>Slide 3</title>
        <content>Hi there</content>
    </slide>
</slides>

1 Ответ

2 голосов
/ 15 декабря 2010

Не идеальное решение, но оно работает:

Я быстро обнаружил, что я не единственный, у кого есть эта проблема:

Поиск в Google , Ошибка JQuery , Вопрос Stackoverflow

и все, что я читаю, указывает на то, как IE читает и анализирует XML. Нашел умное решение, прочитав комментарии здесь:

блог см. Комментарий # 28

Это все еще не сработало. После некоторой игры с функцией ajax alittle я обнаружил, что если я удалю dataType, в дополнение к комментарию № 28 в сообщении в блоге, все будет работать в разных браузерах.

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

//Retrieve our document
$.ajax({
    type: "GET",
    async: false,
    url: settings.PresentationLocation,
    success:function(results){
        var xml = methods.parseXML(results);

        $(xml).find('slide').each(function(){
            //Create the slide
            obj.append('<div class="slide"><div class="slideTitle">'+ $(this).find('title').text() +'</div><div class="slideContent">'+ $(this).find('content').text() +'</div></div>');
        });

        totalSlides = obj.children('.slide').size();

        //Hide all the slides
        obj.children('.slide').hide();
    },
    error: function(xmlReq, status, errorMsg){
        var errMsg = settings.PresentationLocation + " : "+ errorMsg ;
        throw(errMsg);
    }
});

, где method.parseXML определяется как

parseXML : function(xmlFile){
    if (window.ActiveXObject) {
        //IE
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(xmlFile);
        return doc;
    } else if (window.DOMParser) {
        return (new DOMParser).parseFromString(xmlFile, 'text/xml');
    }

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