2010-12-13 43 views
3

Dans IE, JQuery me donne une parseError lorsque j'essaie de lire un fichier XML local. En espérant que quelqu'un pourrait être en mesure de le repérer. Code fonctionne très bien dans FFIE JQuery ajax parseerror sur le fichier xml local

Jquery en question

$.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); 
    } 
}); 

fichier XML

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

Syntaxe me semble bon. Avez-vous testé cela en utilisant des outils de développement dans ie8? avoir plus de détails sur l'erreur que cela vous donne? Si vous ne pouvez pas ajouter de points d'arrêt, j'ajouterais des alertes pour que vous puissiez voir exactement où il se trompe. – wajiw

Répondre

2

pas une solution idéale, mais cela fonctionne:

Je me suis vite découvert que je ne suis pas le seul un ayant ce problème:

google search, JQuery Bug, Stackoverflow question

et tout ce que j'ai l'air de lire indique comment IE lit et analyse XML. Trouvé une solution intelligente lisant les commentaires ici:

blog Voir le commentaire # 28

Ce ne fonctionnait toujours pas. Après avoir joué un peu avec la fonction ajax alittle, j'ai trouvé que si je supprimais le dataType, en plus du commentaire # 28 dans le blog, tout fonctionnait à travers les navigateurs.

code final ressemble à:

//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); 
    } 
}); 

où methods.parseXML est défini comme

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 ""; 
}