4

別のドメインの REST サービスにアクセスしたいと考えています。JQuery で次のように指定した場合:

dataType: 'json'

クロスドメイン呼び出しの場合、代わりに JSONP を使用する必要があるため、予想どおり失敗します。

これを次のように変更すると:

dataType: 'jsonp'

動作することが期待されますが、JSONP 要求によって送信されたapplication/jsonorapplication/xmlまたはtext/htmlなどをサーバーが期待しているため、失敗します。*/*

application/jsonJSONリクエストの実行中にJQueryにAcceptリクエストヘッダーを強制的に入れる方法はありますか?

4

3 に答える 3

5

AFAIK jQueryのJSONPの実装では<script>、DOMに挿入されるタグを使用します(したがって、GET動詞のみに制限されます)。このタグに対して、Acceptリクエストのコンテンツタイプヘッダーを制御することはできません。このタグsrcscriptは、単にリモートドメインのURLを指しています。基になるエンドポイントをフェッチして、通常のGETリクエストを送信するのはブラウザです。

したがって、クロスドメイン呼び出しの要求ヘッダーを設定できるようにする場合は、呼び出しをリモートドメインに委任する(そしてそれぞれのヘッダーを設定する)サーバー側スクリプトをドメインに設定してから、AJAX要求をに送信する必要があります。スクリプト。

于 2012-07-30T16:30:42.060 に答える
0

私はあなたがこれらの線に沿って何かを試してみたいと思うでしょう:

$.ajax({
    headers: { 
        Accept : "application/json; charset=utf-8",
        "Content-Type": "text/plain; charset=utf-8"
    }
    dataType: 'jsonp',
    success : function(response) {
        ...
    }
})
于 2012-07-30T16:32:18.517 に答える
0

これはあなたのユースケースには適していないかもしれませんが、クロスドメインAJAXを行う必要がある場合、通常はドメイン内に追加のリソースを追加するだけで、外部リソースを(cURLなどを介して)呼び出して値を返します呼び出し元のクライアントに。本質的には、AJAX 呼び出しのプロキシを構築しています。確かにオーバーヘッドは増えますが、そのような呼び出しにキャッシュ レイヤーを追加することで軽減できる場合があります。

于 2012-07-30T16:37:35.533 に答える