2009-11-04 6 views
38

Ich habe versucht und konnte nicht herausfinden, wie Sie die gesamte XML-Zeichenfolge aus dem XMLDocument abrufen, die von einem GET zurückgegeben wird. Es gibt viele Fragen zu SO, wie man bestimmte Elemente im Objekt findet oder ersetzt, aber ich finde keine Antwort darauf, wie man das gesamte Dokument als String erhält. Das Beispiel, mit dem ich arbeite, stammt von here. Der "etwas mit Xml machen" -Teil ist, wo ich gerade bin. Ich habe das Gefühl, dass das wirklich trivial sein sollte, aber ich finde es nicht heraus. Gibt es ein "xml.data()" oder ähnliches, das für diesen Zweck verwendet werden kann?Wie bekomme ich die gesamte XML-Zeichenfolge von einem XML-Dokument, das von jQuery (Browser) zurückgegeben wird?

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

Der Anwendungsfall ist, dass ich die xml Flash-Plugin füttern wollen und für die ich brauche die tatsächliche XML als String zurück.

Antwort

44

I need the actual XML as a string

Sie möchten es als einfachen Text anstelle von XML-Objekt? Ändern Sie dataType von 'xml' zu 'text'. Weitere Optionen finden Sie unter $.ajax documentation.

+0

Dank. Ich wusste, es war trivial :) – icecream

+0

+1 Es funktioniert trotz undokumentiert in [Docs Ich habe] gefunden (http://api.jquery.com/jquery.get/). Danke für den Link ajax # options. –

52

Wenn Sie beide möchten, erhalten Sie die Antwort als XML-Dokument und als Zeichenfolge. Sie sollten

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

Lage zu tun Wenn Sie es als Zeichenfolge wollen warum geben Sie dataType:xml wäre dann nicht dataType:text besser geeignet sein?

+0

Wenn ich ein XML-Objekt entworfen hätte, warum hätte ich dann keine API, um die Daten zu erhalten? – icecream

+0

Das XML-Objekt dient zum Abrufen/Bearbeiten von Daten, die im XML-Code gespeichert sind. Du willst das XML selbst, das ist ein subtil anderes Ding :) –

+0

Seltsame gleiche Antwort wie BalusC noch keine einzige Aufzählung noch akzeptiert ?? – jitter

1

Wenn Sie nur eine Zeichenfolge benötigen, die das von jquery zurückgegebene XML darstellt, stellen Sie einfach Ihren Datentyp auf "text" ein, anstatt zu versuchen, das XML wieder in Text zu zerlegen. Folgendes sollte man nur Rohtext zurück geben von Ihrem Ajax-Aufruf:

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

Obwohl diese Frage bereits beantwortet wurde, wollte ich eine Einschränkung hinweisen: Wenn XML Abrufen von jQuery mit Internet Explorer verwenden, können Sie MUST Geben Sie den Inhaltstyp "text/xml" (oder "application/xml") an, andernfalls können Sie die Daten nicht wie XML mit jQuery analysieren.

Sie denken vielleicht, dass dies eine offensichtliche Sache ist, aber es hat mich bei der Verwendung von Mozilla/Chrome/Opera anstelle von IE gefangen. Wenn Sie eine "Zeichenfolge" aus XML mit einem Inhaltstyp "Text" abrufen, können alle Browser mit Ausnahme von IE weiterhin diese Daten analysieren (mithilfe von jQuery-Selektoren) als ob es XML wäre. IE wird keinen Fehler ausgeben und wird einfach keine Ergebnisse an eine jQuery-Auswahlanweisung zurückgeben.

So, in Ihrem Beispiel, solange Sie nur die string-serialisierte Version des XML benötigen und nicht erwarten, dass jQuery irgendeine Art von Auswahl für das XML-DOM trifft, können Sie den Inhaltstyp auf "text" setzen ". Wenn Sie die XML-Datei jedoch auch mit jQuery analysieren müssen, müssen Sie eine benutzerdefinierte Routine schreiben, die die XML-Datei in eine Zeichenfolge für Sie serialisiert, oder Sie können eine XML-Version mit dem Inhaltstyp "xml" abrufen.

Hoffnung, dass jemand hilft :)

24

Sie können auch ein XML-Objekt in einen String, in Ihrem Java-Skript leicht umwandeln:

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

[Jitter Antwort] (http://StackOverflow.com/A/1675058/516229) ist besser, weil es auch IE unterstützt. – ZiggyTheHamster

+3

Scheint nicht für mich zu arbeiten: TypeError: Argument 1 von XMLSerializer.serializeToString implementiert keine Schnittstelle Node. – Yster

1

Sie können das native XMLHttpRequest-Objekt in der Anforderung verwendet erhalten. Zu dem Zeitpunkt, zu dem ich diese Antwort posten möchte, geben jQuery-Dokumente einige Möglichkeiten an, dies zu tun.

Einer von ihnen ist über das dritte Argument für den Erfolg Rückruf:

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

Ein vollständiges Beispiel: https://jsfiddle.net/44m09r2z/