1

これが問題です。次のように、javascript/jquery で ajax 呼び出しを使用して Gmail の連絡先を抽出しています。

function getUserInfo() {
  var xml_parse = "";
  $.ajax({
    url: SCOPE + '?max-results=9999&access_token=' + acToken
    data: null,
    success: function (resp) {
      xml_parse = $.parseXML(resp);
      callGmailHelperWebService(xml_parse);
    },
    dataType: "jsonp"
   });
 }

 function callGmailHelperWebService(xml_parse) {
   GmailHelperService.ConvertXMLToList(xml_parse, onSuccess, onFailed, null);
 }

ご覧のとおり、最初の ajax 呼び出しが成功した場合は、プロジェクトとして保存サーバーにある Web サービスを呼び出す関数を呼び出します (実際には、プロジェクトの一部です)。

私の Web サービス (GmailHelperService) は、他の場所 (たとえば、この ajax 呼び出しの直後など) で確実に呼び出すことができるため、正しく接続されています。ただし、ajax 呼び出しの「成功」部分で呼び出そうとすると、次のエラーが発生します。

キャッチされないエラー: SECURITY_ERR: DOM 例外 18

私の理論では、これはクロスドメインの問題に関係しているということですが、その理由はわかりません。そして、私は確かにこれを修正する方法を理解できません。

助けていただければ幸いです。

4

1 に答える 1

0

JSONP は、次の形式でデータを送信するデータ転送方法です。

callback({"foo":"bar"});

ご覧のとおり、これは xml ではありません。<script>これは、リクエストの読み込みが完了すると実行されるコールバック メソッドでラップされた JSON であり、タグを使用してリクエストできるため、クロスドメインにすることができます。

単純に dataType を JSONP に変更して xml を返すことはできません。XML != JSONP. ただし、たとえば jsonp で XML を返すことはできますがcallback({"xml","... xml string here "})、引用符に注意してください。すべての json キーと値は二重引用符で囲む必要があり、内側の引用符は適切に処理する必要があります。

リクエストが同じドメイン リクエスト (同じプロトコル、同じサブドメイン、同じドメイン、および同じポート) である場合、XML を返す場合は、dataType を "XML" に変更できます。それ以外の場合は、プロキシ スクリプトをセットアップして xml を取得するか、Web サービスで JSONP を返す必要があります。

たとえば、次の URL はすべてクロスドメインと見なされます。

http://example.com
http://www.example.com
https://example.com
https://www.example.com
http://example.com:8080

上記の URL はすべて、同じサーバー上にある場合でも、クロスドメインと見なされます。

于 2012-10-30T14:18:53.957 に答える