JSONPリクエストのHTTPヘッダーを変更する 質問する

JSONPリクエストのHTTPヘッダーを変更する 質問する

Twitter Search API へのリクエストを作成するために jQuery を使用しています。クロスドメイン リクエストに必要な jsonp を使用しています。ただし、Twitter API では、これらのリクエストに一意の User-Agent を設定する必要があると指定されており、設定しない場合はリクエストが制限されます。問題は、jQuery 経由でこのヘッダーを設定する方法が見つからないことです。

私が使用しているコードは次のとおりです:

$.ajax({
    url: 'http://search.twitter.com/search.json',
    dataType: 'jsonp',
    type: 'get',
    data: { q: 'twitter' },
    success: function(data) {
        alert(data.results);
    }
});

beforeSend メソッドを使用してみましたが、このイベントは発生していないようです。この問題を解決する方法を誰か思いつきますか?

ありがとう。

ベストアンサー1

パディング付きJSONはページにスクリプト要素を追加することで機能します。ソース属性は、Web サービスの URL を指します。Web サービスは、スクリプトの解析が終了したときに実行されるコールバック関数でラップされたデータを含むスクリプトを返します。これは JSON というよりは (そもそも有効な JSON である必要すらありません)、プレーンな JavaScript です。

残念ながら、ページに追加されたスクリプト要素に送信されるヘッダーを変更する方法はありません。唯一できることは、次のようなクロスオリジン互換のデータ取得方法を確認することです。

  • XMLHttpRequest レベル 2- Chrome、Safari 4+、Firefox 3.5+、Opera

    // Is XMLHttpRequest Level 2 supported?
    if ("withCredentials" in new XMLHttpRequest()) 
  • Xドメインリクエスト- IE 8、IE 9の場合

    // Is XDomainRequest supported?
    if ("XDomainRequest" in window)

これらの実装が存在する場合はテストし、それに応じて使用し、サポートされていないブラウザーや古いブラウザーの場合は標準の JSONP にフォールバックすることをお勧めします。

また、Web サービスがクロスオリジン リクエストを許可するように設定されていない可能性もあります (ただし、これは注目度が高いため、可能性は低いです)。そのため、リクエストが失敗した場合は、JSONP にフォールバックする必要がある可能性があります。クロスオリジンリソース共有

おすすめ記事