web-dev-qa-db-ja.com

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

私はjqueryを使用してTwitter Search APIへのリクエストを作成しています。クロスドメインリクエストに必要なjsonpを使用しています。ただし、Twitter APIは、これらのリクエストに一意のユーザーエージェントを設定する必要があることを指定し、設定しない場合はリクエストを制限します。問題は、jqueryを使用してこのヘッダーを設定する方法がないことです。

これは私が使用しているコードです:

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

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

ありがとう。

27
Dan D.

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

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

  • XMLHttpRequest Level 2 -Chrome、Safari 4以降、Firefox 3.5以降、Opera

    // Is XMLHttpRequest Level 2 supported?
    if ("withCredentials" in new XMLHttpRequest()) 
  • XDomainRequest -for IE 8、IE 9

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

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

クロスオリジンリクエストを許可するようにWebサービスが設定されていない可能性もあります(ただし、注目度が高いため)、リクエストが失敗した場合でもJSONPにフォールバックする必要がある場合があります。 Cross-Origin Resource Sharing も参照してください。

55
Andy E

これを試して :

// OAuth configurations   
    var config = {
      'client_id': 'xxxxxx.apps.googleusercontent.com',
      'scope': 'https://www.google.com/m8/feeds/contacts/default/full'          
    };

gapi.auth.authorize(config, function(data) {
      // login complete - now get token
      var token = gapi.auth.getToken();
      token.alt = 'json';
      // retrieve contacts
      jQuery.ajax({
        url: 'https://www.google.com/m8/feeds/contacts/default/full/?max-results=999999',
        dataType: 'jsonp',
        data: token,
        success: function(data) { successGmail(data); }
      });
    });

私はそれをそこに見つけました: https://groups.google.com/d/msg/google-api-javascript-client/GuFxPzqQ9-0/hZpo041UaH4J

0
Azr