2009-11-04 5 views
38

J'ai essayé et échoué à trouver comment obtenir la chaîne XML entière à partir de XMLDocument retourné par un GET. Il y a beaucoup de questions sur SO sur la façon de trouver ou de remplacer des éléments spécifiques dans l'objet, mais je n'arrive pas à trouver de réponse à la façon d'obtenir le document entier sous forme de chaîne. L'exemple avec lequel je travaille est here. Le "faire quelque chose avec xml" -part est où je suis en ce moment. J'ai l'impression que cela devrait être vraiment trivial, mais je n'arrive pas à savoir comment. Y at-il un "xml.data()" ou similaire qui peut être utilisé à cette fin?Comment obtenir la chaîne XML entière à partir d'un XMLDocument retourné par jQuery (navigateur croisé)?

$.ajax({ 
    url: 'document.xml', 
    type: 'GET', 
    dataType: 'xml', 
    timeout: 1000, 
    error: function(){ 
     alert('Error loading XML document'); 
    }, 
    success: function(xml){ 
     // do something with xml 
    } 
}); 

Le cas d'utilisation est que je veux nourrir le xml pour plugin flash et que j'ai besoin le XML réel comme une chaîne.

Répondre

44

I need the actual XML as a string

Vous le souhaitez en tant que texte brut au lieu d'un objet XML? Remplacez dataType par 'xml' par 'text'. Voir le $.ajax documentation pour plus d'options.

+0

Merci. Je savais que c'était trivial :) – icecream

+0

+1 Cela fonctionne malgré document non documenté dans [documents que j'ai trouvé] (http://api.jquery.com/jquery.get/). Merci pour le lien ajax # options. –

52

Si vous voulez les deux, obtenez la réponse en tant que document XML et en tant que chaîne. Vous devriez être en mesure de le faire

success: function(data){ 
    //data.xml check for IE 
    var xmlstr = data.xml ? data.xml : (new XMLSerializer()).serializeToString(data); 
    alert(xmlstr); 
} 

Si vous voulez en tant que chaîne pourquoi vous spécifiez dataType:xml ne serait pas alors dataType:text plus approprié?

+0

Si je concevais un objet XML, pourquoi n'aurais-je pas d'API pour obtenir les données? – icecream

+0

L'objet XML sert à obtenir/manipuler des données stockées dans le fichier XML. Vous voulez le XML lui-même, qui est une chose subtilement différente :) –

+0

Étrange même réponse que BalusC pas encore un seul upvote ni accepté ?? – jitter

1

Si vous avez seulement besoin d'une chaîne représentant le xml renvoyé par jquery, définissez simplement votre type de données sur "text" plutôt que d'essayer d'analyser de nouveau le xml en texte. Ce qui suit devrait vous donner du texte brut retour de l'appel ajax:

$.ajax({ 
    url: 'document.xml', 
    type: 'GET', 
    dataType: 'text', 
    timeout: 1000, 
    error: function(){ 
     alert('Error loading XML document'); 
    }, 
    success: function(xml){ 
     // do something with xml 
    } 
}); 
1

Bien que cette question a déjà répondu, je voulais signaler une mise en garde: Lors de la récupération XML en utilisant jQuery avec Internet Explorer, vous MUST spécifiez le type de contenu à "text/xml" (ou "application/xml") sinon vous ne pourrez pas analyser les données comme si elles étaient XML en utilisant jQuery.

Vous pensez peut-être que c'est une évidence, mais cela m'a attrapé en utilisant Mozilla/Chrome/Opera au lieu de IE. Lors de la récupération d'une "chaîne" de XML avec un type de contenu "text", tous les navigateurs sauf IE vous permettront toujours d'analyser ces données (en utilisant les sélecteurs jQuery) comme s'il s'agissait de XML. IE ne lancera pas d'erreur et ne retournera aucun résultat à une instruction de sélection jQuery. Ainsi, dans votre exemple, tant que vous n'avez besoin que de la version sérialisée du XML et que vous ne vous attendez pas à ce que jQuery effectue une sélection sur le DOM XML, vous pouvez définir le type de contenu sur "texte". ". Mais si vous avez également besoin d'analyser le XML avec jQuery, vous devrez écrire une routine personnalisée qui sérialise le XML en une chaîne pour vous, ou bien récupérer une version du XML avec le type de contenu "xml".

espoir qui aide une personne :)

24

Vous pouvez également facilement convertir un objet XML à une chaîne, dans votre script java:

var xmlString = (new XMLSerializer()).serializeToString(xml); 
+0

[la réponse de jitter] (http://stackoverflow.com/a/1675058/516229) est meilleure car elle prend également en charge IE. – ZiggyTheHamster

+3

Ne semble pas fonctionner pour moi: TypeError: l'argument 1 de XMLSerializer.serializeToString n'implémente pas le nœud d'interface. – Yster

1

Vous pouvez obtenir l'objet natif XMLHttpRequest utilisé dans la demande. Au moment où je publie cette réponse, les docs de jQuery indiquent quelques façons de le faire.

L'un d'eux est par le troisième argument de la fonction de rappel de succès:

success: function(xml, status, xhr){ 
    console.log(arguments); 
    console.log(xhr.responseXML, xhr.responseText); 
    console.log('Finished!'); 
} 

Pour un exemple complet: https://jsfiddle.net/44m09r2z/

Questions connexes