La conversion d’object XML jQuery en chaîne génère une erreur de sécurité

J’ai un object XML généré par jQuery à partir de la réponse d’un Webservice REST:

$.ajax({ type: "GET", url: "http://localhost:9299/foo", success:function(xml) { xmlDoc = $.parseXML(xml); $xml = $(xmlDoc); // The rest of the code manipulates the structure of the XML } }); 

Maintenant, je dois sortir l’object XML modifié sous forme de chaîne. J’ai déjà trouvé cette solution pour Firefox et d’autres navigateurs:

 out = new XMLSerializer().serializeToSsortingng($xml); 

Mais tout ce que je reçois ici est le message d’erreur suivant:

 [Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "http://localhost/bar"] 

Tous les fichiers dont j’ai besoin sont sur localhost (y compris le service Web qui me fournit le XML et la bibliothèque jQuery)

Toutes les idées seraient très appréciées

Modifier:

J’ai simplifié le problème et essayé le code suivant:

 $xml = $('blablubb'); $xml.find("element").each(function() { alert($(this).text()); }); out = new XMLSerializer().serializeToSsortingng($xml); 

Même sans appel du service Web, le problème rest le même. (L’alerte affiche le contenu correctement)

Edit 2:

Grâce au commentaire de Kevin B, j’ai une solution de travail:

 $.ajax({ type: "GET", url: "http://localhost:9299/foo", dataType: 'xml', success:function(xml) { var $xml = $(xml); // The rest of the code manipulates the structure of the XML } }); 

La dernière ligne ne change pas:

 out = new XMLSerializer().serializeToSsortingng($xml); 

Tout d’abord, je ne peux pas confirmer / refuser, en fonction de votre code, s’il s’agit ou non d’une demande interdomaine. Interdomaine: lorsque le numéro de port, le domaine ou le protocole du fichier externe est différent de celui qui demande le fichier externe.

S’il s’agit bien d’une requête interdomaine, vous devez implémenter CORS ou un proxy côté serveur pour la demander à votre place.

Deuxièmement, vous n’avez pas besoin d’utiliser $.parseXML() . Essaye ça:

 $.ajax({ type: "GET", url: "/foo", dataType: "xml", success:function(xml) { var $xml = $(xml); // The rest of the code manipulates the structure of the XML } }); 

Le XML doit également être valide pour fonctionner dans tous les navigateurs.

Edit: Ce n’est donc pas un problème inter-domaines, ni un problème jQuery. Voici un peu plus de débogage: http://jsfiddle.net/RKpua/ J’ai utilisé un très simple document xml, pouvez-vous remplacer le simple document xml par votre xml?

Vous n’avez pas besoin d’parsingr la sortie car jQuery l’inverse. dans tous les cas, vous pouvez spécifier le type de données.

 $.ajax({ type: "GET", url: "http://localhost:9299/foo", dataType: "xml", success:function(xml) { $xml = $(xmlDoc); // The rest of the code manipulates the structure of the XML } }); 

Vous devez accéder à la propriété dom xml de l’object jQuery en spécifiant le premier élément de l’object jQuery.

 out = new XMLSerializer().serializeToSsortingng($xml[0]); 

De plus, XMLSerializer n’est pas disponible dans IE <9. Pour IE8, utilisez les éléments suivants:

 out = $xml[0].xml; 

Ou comme une extension jQuery

 $.fn.xml2ssortingng = function(){ if (window.XMLSerializer) { return (new XMLSerializer()).serializeToSsortingng(this[0]); } else if (typeof this[0].xml != "undefined") { return this[0].xml; } return ""; };