2009-11-04 7 views
38

Ho provato e non sono riuscito a scoprire come ottenere l'intera stringa XML dal XMLDocument restituito da un GET. Ci sono molte domande su SO su come trovare o sostituire elementi specifici nell'oggetto, ma non riesco a trovare alcuna risposta su come ottenere l'intero documento come una stringa.Come posso ottenere l'intera stringa XML da un XMLDocument restituito da jQuery (cross browser)?

L'esempio con cui sto lavorando è da here. Il "fai qualcosa con xml" -part è dove mi trovo in questo momento. Ho la sensazione che questo dovrebbe essere davvero banale, ma non riesco a scoprire come. Esiste un "xml.data()" o simile che può essere utilizzato per questo scopo?

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

Il caso d'uso è che voglio per alimentare il xml plug in flash e per questo ho bisogno di XML attuale come una stringa.

risposta

44

I need the actual XML as a string

Si desidera come testo normale anziché oggetto XML? Modifica dataType da 'xml' a 'text'. Vedi lo $.ajax documentation per ulteriori opzioni.

+0

Grazie. Sapevo che era banale :) – icecream

+0

+1 Funziona nonostante non documentato in [documenti che ho trovato] (http://api.jquery.com/jquery.get/). Grazie per il link ajax # options. –

52

Se si desidera entrambi, ottenere la risposta come documento XML e come stringa. Si dovrebbe essere in grado di fare

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

Se si desidera come stringa perché si specifica dataType:xml non sarebbe poi dataType:text più appropriato?

+0

Se ho progettato un oggetto XML, perché non dovrei avere un'API per ottenere i dati? – icecream

+0

L'oggetto XML serve per ottenere/manipolare dati archiviati all'interno di XML. Volete lo stesso XML, che è una cosa leggermente diversa :) –

+0

Strana stessa risposta di BalusC, ma non un singolo upvote né accettato ?? – jitter

1

Se è necessaria una stringa che rappresenta il xml restituito da jquery, è sufficiente impostare il tipo di dati su "testo" anziché cercare di analizzare l'xml nel testo. Il seguente dovrebbe solo dare testo grezzo indietro dal vostro Ajax chiamata:

$.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

Anche se questa domanda è già stato risposto, ho voluto sottolineare un avvertimento: Quando si recuperano XML utilizzando jQuery con Internet Explorer, si MUST specificare il tipo di contenuto come "text/xml" (o "application/xml") altrimenti non sarai in grado di analizzare i dati come se fossero XML usando jQuery.

Si potrebbe pensare che questa è una cosa ovvia ma mi ha sorpreso quando si utilizza Mozilla/Chrome/Opera anziché IE. Quando si recupera una "stringa" di XML con un tipo di contenuto di "testo", tutti i browser tranne IE permetteranno comunque di analizzare quei dati (usando i selettori jQuery) come se fossero XML. IE non genererà un errore e semplicemente non restituirà alcun risultato a una dichiarazione di selezione jQuery.

Quindi, nel tuo esempio, se hai bisogno solo della versione serializzata da stringa dell'XML e non ti aspetteresti che jQuery esegua alcun tipo di selezione sul DOM XML, puoi impostare il tipo di contenuto su "testo" ". Ma se si ha ANCHE bisogno di analizzare l'XML con jQuery, sarà necessario scrivere una routine personalizzata che serializza l'XML in una stringa, oppure recuperare una versione dell'XML con tipo di contenuto "xml".

Speranza che aiuta qualcuno :)

24

Si può anche convertire facilmente un oggetto XML in una stringa, nello script java:

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

[risposta di jitter] (http://stackoverflow.com/a/1675058/516229) è migliore perché supporta anche IE. – ZiggyTheHamster

+3

Non sembra funzionare per me: TypeError: l'argomento 1 di XMLSerializer.serializeToString non implementa il nodo di interfaccia. – Yster

1

È possibile ottenere l'oggetto XMLHttpRequest nativo utilizzato nella richiesta. Al momento in cui sto postando questa risposta, i documenti di jQuery indicano alcuni modi per farlo.

Uno di loro è attraverso il terzo argomento della richiamata successo:

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

Per un esempio completo: https://jsfiddle.net/44m09r2z/

Problemi correlati