6

jQuery:

$.ajax({
url : url,
type : 'GET',
dataType: 'json',
data: {
    'FN'    : 'GetPages',
    'PIN'   : '7659' 
},
xhrFields: {
   withCredentials: true
},
crossDomain: true,
success: function(data) {
    alert('succsess');
    console.log('data', data);
},
error: function (xhr, ajaxOptions, thrownError) {
    alert('error');
    console.log(xhr.status);
    console.log(thrownError);
}
});

Firebug Firefox ネットワーク

Firebug エラー

何が起こるのですか

AJAX "error:" イベントがトリガーされ、console.logの出力は次のようになります。

xhr.status -> 0

throwError -> (空の文字列)

これは正常ですか?ブラウザーに URL を入力すると、JSON コンテンツを含むファイルのダウンロードが表示されますが、これは問題ではないでしょうか?

4

3 に答える 3

10

@CrimsonChinのおかげで、私はそれがSame Origin Policyの問題であることを知っています

コンピューティングでは、同一生成元ポリシーは、JavaScript などの多くのブラウザー側プログラミング言語にとって重要なセキュリティ概念です。このポリシーは、同じサイトからのページで実行されているスクリプトが、特定の制限なしに互いのメソッドとプロパティにアクセスすることを許可しますが、異なるサイトのページにまたがるほとんどのメソッドとプロパティへのアクセスを防ぎます.[1]

( http://en.wikipedia.org/wiki/Same_origin_policyより)

JavaScript クライアントにリソースへの基本的なアクセスを許可するには、HTTP 応答ヘッダーを 1 つ追加するだけです。

Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: http://foo.example.com

( http://enable-cors.org/から)

多くの場合、JSON 応答をJSONP応答に変換することもできます。Thx @djakapm

于 2012-11-26T09:52:15.157 に答える
2

画像からはわかりませんが、AJAX リクエストを別のドメインに送信しようとしている場合は、JSONPを使用する必要があります。単純な AJAX リクエストでは不十分です。

に変更dataType: 'json'してみてくださいdataType: 'jsonp'

そしてあなたに追加callback=?しますURL

于 2012-11-23T08:10:42.307 に答える