本地xml文件上的IE JQuery ajax parseerror

时间:2010-12-13 22:38:05

标签: jquery xml ajax internet-explorer

在IE中,当我尝试读取本地XML文件时,JQuery给了我一个parseError。希望有人能够发现它。代码在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 个答案:

答案 0 :(得分:2)

不是理想的解决方案,但它有效:

我很快发现我并不是唯一一个遇到这个问题的人:

google searchJQuery BugStackoverflow question

我似乎阅读的所有内容都指向IE如何读取和解析XML。找到一个聪明的解决方案,阅读这里的评论:

blog请参阅评论#28

这仍然无效。在玩了一些ajax函数后,我发现如果删除了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);
    }
});

其中methods.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 "";
}