1

これは私を本当に混乱させました。私はクロス ドメイン リクエストを送信していますが、それが確実に通過して正常に返されていることがわかっていますが、成功関数は起動されません。アラートが表示されない...

jQuery.getJSON('http://xxxx.appspot.com?callback=?', function(json) { 
    //console.log(json);
    alert ('text');
  });

リクエストが成功したことを示す兆候がいくつかあります。

  1. サーバーで見ます
  2. [ネットワーク] タブに応答コードと本文が表示されます
  3. 不正な形式の JSON を返そうとすると、エラーが発生します。

しかし、成功関数でアラートを受け取ることはありません

さまざまなバージョンの jQuery を使用して、いくつかのページで試してみました。

更新:ヘッダーを有効にしましたが、まったく同じ結果が得られました。アラートは発生していません。

これは応答のヘッダーです。

HTTP/1.1 200 OK
Content-Type: application/json; charset=ISO-8859-1
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin,SOAPserver,SOAPaction,Method,Accept,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Mon, 12 Nov 2012 12:30:02 GMT
Server: Google Frontend
Cache-Control: private
Content-Length: 36
4

3 に答える 3

1

クロスドメイン リクエストであることが明確にわかっているように、オリジン ポリシーが同じであることを少なくとも少しは知っていると思います。

つまり、サーバーに適切な CORS ヘッダーを設定しなかった場合appspot.com、ブラウザーがスクリプトに結果の分析を許可する理由はありません。幸いなことに、ほぼすべてのサーバー側言語で、関連するヘッダーを簡単に追加できます。もちろん、これはサーバーを変更できることを意味します (または、ブラウザーからサーバーとして認識されるものは、プロキシである可能性があります)。


編集 :

callback=?あなたが呼び出した URL に今気づきました。これは、JSON ではなく、JSONP でサービスを呼び出していることを意味します (クロスドメインの問題に対する古いソリューションです)。コールバック構文では機能せず、応答ヘッダーに が含まれてapplication/jsonいるため、プレーン json を処理できるかどうかを確認してみてください。?callback=?URL の末尾を省略してみてください。

于 2012-11-12T11:48:14.370 に答える
0

CORS (Cross-Origin Resource Sharing) について話すとき、それはすべてヘッダーに関するものです。

リクエスト ヘッダーと回答ヘッダーが正しいかどうかは非常に重要です。正しくないと機能しません。

リクエストヘッダーが正しくない場合、リクエストはサーバーによって無慈悲に殺されます。回答ヘッダーが正しくない場合、回答はブラウザー クライアントによって無視されます。

答えには、次のヘッダー サブセットが含まれているはずです。

  • アクセス制御許可オリジン
  • Access-Control-Allow-Credentials
  • アクセス制御許可メソッド
  • アクセス制御許可ヘッダー

リクエストで使用されるすべてのオリジン、メソッド、およびヘッダーは、サーバーの回答で許可されている必要があります。許可されていない場合は無視されます。

例えば:

Access-Control-Allow-Origin *;
Access-Control-Allow-Credentials true;
Access-Control-Allow-Methods GET, POST, OPTIONS, PUT, DELETE;
Access-Control-Allow-Headers Origin,SOAPserver,SOAPaction,Method,Accept,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;

これ以上の情報がなければ、私はこれ以上役に立つことはできません:)

于 2012-11-12T11:57:06.957 に答える
0

これも追加

Access-Control-Max-Age: 3600

また、Access-Control-Request-Methodブラウザのリクエストで を確認してください。

于 2013-07-30T09:47:55.467 に答える