2010-06-25 2 views
1

Je construis une seule page HTML pour une utilisation dans un kiosque à écran tactile. J'ai un fichier XML externe nommé data.xml qui réside dans le même répertoire que ma page HTML. J'ai été capable d'utiliser jQuery pour charger le fichier XML externe, l'analyser et construire du HTML de façon dynamique sur le chargement de la page sans aucun problème dans Firefox et Chrome. Mais ensuite je l'ai essayé dans Internet Explorer ...Comment interroger des éléments XML à partir d'un fichier XML local dans Internet Explorer à l'aide de jQuery?

Le document XML se charge très bien en utilisant la fonction $ .ajax(). J'ai fait un alert(xmlDoc.text()) et il a montré tout le contenu du texte du document XML. Donc ce n'est pas le problème.

J'ai fait quelques recherches et trouvé a StackOverflow answer qui donne une solution au problème SI vous servez le XML à partir d'un serveur Web. Il indique essentiellement que l'en-tête HTTP suivant est nécessaire pour qu'Internet Explorer traite la chaîne xml en tant que xml.

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

Cette page HTML doit fonctionner comme une page autonome dans Internet Explorer. Nous n'aurons pas de serveur Web en cours d'exécution sur la machine à kiosque.

Ma question est de savoir s'il existe un moyen de spécifier le bon type de contenu lors du chargement d'une ressource locale dans jQuery?

Voici le code ajax pertinent Je travaille avec ...

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

EDIT: J'ai ajouté une fonction de gestion des erreurs sur la demande ajax comme si ...

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

Cette fonction est déclenchée dans Internet Explorer et le message résultant est:

Data Could Not Be Loaded: - parsererror

J'ai vérifié mon document XML avec plusieurs outils de validation XML en ligne et il n'y a pas d'erreur.

Toute aide est appréciée.

Répondre

4

Après quelques tests, j'ai réussi à fais-le fonctionner. Le problème est que lorsque vous chargez des fichiers XML localement, les données reçues par Internet Explorer sont en texte brut et non en format text/xml.

La solution est:

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

Vous pouvez voir l'explication complète de ce lien:

http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

Je suis heureux si je l'aidais.

+1

Qui a frappé le clou sur la tête! Merci Philipe! – jessegavin

1

Essayez de changer votre type de contenu:

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

Et ne pas oublier d'ajouter cette ligne dans votre fichier XML (doit être la première ligne)

<?xml version="1.0" encoding="utf-8"?> 
+0

Où suggérez-vous que je change le type de contenu? Je ne sers pas le fichier XML à partir d'un serveur Web. Je vais essayer la déclaration XML. – jessegavin

+0

J'ai ajouté la déclaration XML et j'obtiens les mêmes résultats. – jessegavin

Questions connexes