40


5

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

私が取り組んでいる例は、 ここからです。 「xmlを使って何かをする」という部分は、私が現在いるところです。 これは本当に簡単なことであると私は感じますが、私はその方法を見つけることができません。 この目的のために使用できる "xml.data()"などがありますか?

$。ajax({url: 'document.xml'、タイプ: 'GET'、データタイプ: 'xml'、タイムアウト:1000、エラー:function(){alert( 'Error loading XML document');}、成功:function (xml){// xmlで何かをする}});

ユースケースは、xmlをflashプラグインに渡したいということです。そのためには、実際のXMLを文字列として必要とします。

6 回答


54


両方が必要な場合は、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`より適切ではないでしょうか。


44


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

XMLオブジェクトではなくプレーンテキストとして使用しますか? 「dataType」を「xml」から「text」に変更します。 その他のオプションについては、http://docs.jquery.com/Ajax/jQuery.ajax#options[$.ajaxのドキュメント]を参照してください。


23


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

var xmlString =(new XMLSerializer())。serializeToString(xml);


1


jqueryから返されたxmlを表す文字列だけが必要な場合は、xmlを解析してテキストに戻すのではなく、データ型を "text"に設定してください。 次のコードはあなたのajax呼び出しからの生のテキストを返します。

$。ajax({url: 'document.xml'、タイプ: 'GET'、データタイプ: 'text'、タイムアウト:1000、エラー:function(){alert( 'Error loading XML document');}、成功:function (xml){// xmlで何かをする}});


1


この質問にはすでに回答していますが、注意しておきたいのは、Internet ExplorerでjQueryを使用してXMLを取得する場合は、content-typeを "text / xml"(または "application / xml")に指定することです。 jQueryを使用してXMLのようにデータを解析することはできません。

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

したがって、この例では、文字列シリアル化されたバージョンのXMLのみが必要で、jQueryがXML DOMに対して何らかの選択を行うことを想定していない限り、content-typeを "text"に設定できます。 しかし、jQueryを使用してXMLを解析する必要がある場合は、XMLを文字列にシリアル化するカスタムルーチンを作成するか、そうでなければcontent-type "xml"を使用してXMLのバージョンを取得する必要があります。

誰かに役立つことを願っています:)


1


リクエストで使用されているネイティブの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/