2012-02-27 5 views
3

をスローします。 Webサービスを含むの変換は、私はREST Webサービスの応答からのjQueryによって生成されたXMLオブジェクトを持つセキュリティエラー

[Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "http://localhost/bar"] 

私は必要なすべてのファイルがローカルホスト上にある(これは:IすでにFirefoxや他のブラウザのため、この解決策を見つけた:

out = new XMLSerializer().serializeToString($xml); 

しかし、私はここに来るすべては、次のエラーメッセージです私はすべてのアイデアが高く評価されるだろう

XMLとjQueryライブラリ)を提供

編集:

私は問題を単純化し、次のコードを試してみた:

$xml = $('<?xml version="1.0"?><root><element>bla</element><element>blubb</element></root>'); 
$xml.find("element").each(function() { 
    alert($(this).text()); 
}); 
out = new XMLSerializer().serializeToString($xml); 

をしても任意のWebサービスの呼び出しなしで問題は同じまま。 (アラートが正しくコンテンツを出力)

編集2:最後の行にはない

$.ajax({ 
    type: "GET", 
    url: "http://localhost:9299/foo", 
    dataType: 'xml', 
    success:function(xml) { 
     var $xml = $(xml); 
     // The rest of the code manipulates the structure of the XML 
    } 
}); 

ケビン・Bによるコメントのおかげで、私が働いて解決策を持っています変更:

out = new XMLSerializer().serializeToString($xml); 
+1

として以下を使用してください。 XMLとして解析しませんでした。 http://jsfiddle.net/RKpua/7/ –

+1

あなたのEdit2は、 'dataType:" xml "'を私の答えと同じように '$ .parseXML()'を必要としません。 –

答えて

1

最初に、このコードがクロスドメインリクエストであるかどうかに基づいて、確認/拒否することはできません。クロスドメインは、外部ファイルのポート番号、ドメイン、またはプロトコルが外部ファイルを要求するものと異なる場合です。

クロスドメインリクエストの場合は、CORSまたはサーバーサイドプロキシを実装してリクエストする必要があります。

第2に、$.parseXML()を使用する必要はありません。これを試してください:

XMLは、すべてのブラウザで機能するように有効である必要があります。

編集:ドメイン間の問題ではなく、jqueryの問題ではありません。ここにいくつかのデバッグがあります:http://jsfiddle.net/RKpua/非常に単純なXML文書をそこに使用しましたが、単純なXML文書をXMLに置き換えることはできますか?

+0

ありがとう、$ .parseXML()は本当に不要です。残念ながら、それはまだ仕事をしません。あなたが言及したように、私のWebサービスのポート番号は実際に私のjqueryを使用しているインターフェイスとは異なります。しかし、それは問題ではありません。なぜなら、私はローカル変数xmlにデータを保存し、後でそれを参照するか、間違っているからですか?残りの必要なファイル(jqueryライブラリなど)は、同じサーバー(およびポート)で使用できます。 – Velarion

+0

あなたが提案するようにクロスドメインの場合は、CORSを実装したり、サーバー側のプロキシスクリプトを使用してリクエストしたりしない限り、javascriptでリクエストすることはできません。 http://en.wikipedia.org/wiki/Cross-origin_resource_sharing –

+0

しかし、私はすでにwebserviceのレスポンスをロードし、対応するオブジェクトのDOMのさまざまな部分を変更/出力することができました。これがなぜ機能し、ローカルオブジェクトから通常のStringへの変換ではないのですか? – Velarion

0

jQueryが推論するので、出力を解析する必要はありません。どのような場合でも、dataTypeを指定できます。

$.ajax({ 
    type: "GET", 
    url: "http://localhost:9299/foo", 
    dataType: "xml", 
    success:function(xml) { 
     $xml = $(xmlDoc); 
     // The rest of the code manipulates the structure of the XML 
    } 
}); 
0

jqueryオブジェクトのxml domプロパティにアクセスするには、jqueryオブジェクトの最初の要素を指定する必要があります。

out = new XMLSerializer().serializeToString($xml[0]); 

また、XMLSerializerはIE <にはありません。IE8は

out = $xml[0].xml; 

またはあなたの最新の編集についてjqueryの拡張子

$.fn.xml2string = function(){ 
if (window.XMLSerializer) { 
    return (new XMLSerializer()).serializeToString(this[0]); 
} else if (typeof this[0].xml != "undefined") { 
    return this[0].xml; 
} 
return ""; 
}; 
+0

IE8の例では 'xml()'を使用し、xml2string関数では 'xml'というプロパティを使用しています。どちらの場合でもそれは財産でなければならないのでしょうか? (または両方の場合の関数?) –

+0

あなたは正しいです。 xmlはIE8のXMLノードのプロパティです。カッコを入れてはいけません。回答が更新されました。 – Matt

関連する問題