0

私はJSで以下を実行しています。

var url = ...;
$.ajax({
  url: url,
  error: function(p1, p2) { alert(p2); }
});

テキストエラーが表示されますが、FF のコンソールを確認すると、200 OKとして指定されたアドレスへの呼び出しが一覧表示されます。ただし、成功は呼び出されないため、エラーが発生するようです。

  1. それはどのように可能ですか?
  2. エラーのメッセージはどこで確認できますか(state()rejectと表示されます)。
4

1 に答える 1

1

これは、クロスドメイン リクエストの失敗の結果です。

ネットワーク レベルでは、リクエストは成功します (これが Firefox が200 OKレスポンスを表示する理由です) が、同一オリジン ポリシー (SOP) がエラーをトリガーし、JavaScript がレスポンスを読み取れなくなります。

リクエストを成功させたい場合は、次のいずれかを行います。

  • 要求されたサーバーAccess-Control-Allow-Originに、要求元の適切なヘッダーを提供させます。(これは、ターゲット サーバーを制御している場合にのみ可能です。)

  • JSONP を使用する: サーバーにスクリプト形式でデータを送信させ、クライアントにそれを<script>タグで実行させます。(繰り返しますが、ターゲット サーバーはこれを既にサポートしている必要があります。)

  • 独自のサーバーをセットアップして、HTTP 要求をプロキシし、応答をスクリプトに転送します。

    Client Ajax ==> Your server (allowed by SOP) ==> Target resource
    

    これは Cookie を転送しないことに注意してください。そのため、traget リソースが認証を必要とする場合、その認証は失敗します。

于 2013-10-31T14:36:20.117 に答える