web-dev-qa-db-ja.com

jQueryから返されたXMLDocumentからXML文字列全体を取得するには(クロスブラウザー)?

GETによって返されたXMLDocumentからXML文字列全体を取得する方法を見つけようとしましたが、失敗しました。オブジェクト内の特定の要素を検索または置換する方法については、SOについて多くの質問がありますが、ドキュメント全体を文字列として取得する方法についての答えを見つけることができないようです。

私が取り組んでいる例は here からです。 「xmlで何かをする」パートは、私が現在いるところです。これは本当に些細なことだと感じていますが、その方法を見つけることができません。この目的に使用できる「xml.data()」などがありますか?

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

ユースケースは、xmlをフラッシュプラグインにフィードすることです。そのためには、実際のXMLを文字列として必要とします。

40
icecream

実際のXMLが文字列として必要です

XMLオブジェクトの代わりにプレーンテキストとして必要ですか? dataType'xml'から'text'に変更します。その他のオプションについては $。ajax documentation をご覧ください。

44
BalusC

両方が必要な場合は、XMLドキュメントおよび文字列として応答を取得します。あなたはできるはずです

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

あなたが文字列としてそれを望むなら、なぜあなたはdataType:xmlはその後dataType:textより適切ですか?

54
jitter

Javaスクリプトで、xmlオブジェクトを文字列に簡単に変換することもできます。

var xmlString = (new XMLSerializer()).serializeToString(xml);
23
Paul Gorbas

Jqueryから返されたxmlを表す文字列のみが必要な場合は、xmlを解析してテキストに戻すのではなく、データ型を「text」に設定するだけです。以下は、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
Ryan Brunner

この質問には既に答えていますが、注意点を指摘したかったです。InternetExplorerでjQueryを使用してXMLを取得する場合、[〜#〜] must [〜#〜]にコンテンツタイプを指定します「text/xml」(または「application/xml」)、またはjQueryを使用してXMLであるかのようにデータを解析することはできません。

これは明らかなことだと思われているかもしれませんが、IEの代わりにMozilla/Chrome/Operaを使用すると、私を捕まえました。 content-typeが "text"のXMLの "string"を取得する場合、IEを除くすべてのブラウザーで、jQueryセレクターを使用して、XMLであるかのようにデータを解析できます。 IEはエラーをスローせず、jQuery選択ステートメントに結果を返しません。

したがって、この例では、XMLの文字列シリアル化バージョンのみが必要であり、jQueryがXML DOMに対して何らかの選択を行うことを期待しない限り、content-typeを「text」に設定できます。ただし、jQueryを使用してXMLを解析する必要がある場合は、XMLを文字列にシリアル化するカスタムルーチンを記述するか、コンテンツタイプ「xml」でXMLのバージョンを取得する必要があります。

それが誰かを助けることを願っています:)

1
vmfedor

リクエストで使用されるネイティブXMLHttpRequestオブジェクトを取得できます。私がこの回答を投稿している時点で、jQueryのドキュメントにはそうするためのいくつかの方法が記載されています。

それらの1つは、成功コールバックの3番目の引数を介したものです。

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

完全な例: https://jsfiddle.net/44m09r2z/

1
RibeiroBreno