5

JSONP 呼び出しにカスタム ヘッダーを適用できないため、クロス ドメイン リクエストを作成し、jQuery を使用してカスタム ヘッダーを適用するにはどうすればよいですか?

私は基本的にjQueryでGoogleドキュメントにアクセスしようとしており、認証トークンを渡す必要があります:

var token = "my-auth-token";
$.ajax({
  url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
  dataType: 'json',
  beforeSend: function(xhr) {
    xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
  },
  success: function(data, textStatus, XMLHttpRequest) {
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
  }
});

注: これの目的は、アプリケーション層を完全にバイパスすることです。ruby を使用して Google Data API に接続するのは簡単ですが、常にサーバー側でフィードを解析するために多くのリソースを消費します。

4

3 に答える 3

5

Google の JavaScript クライアント ライブラリを使用して、Docs API にクエリを実行できます。Docs 専用のヘルパーは付属していませんが、Docs を含むほとんどの API で使用できます。実際の例を示す Google の従業員によるこのブログ投稿を参照してください。

認証の無限ループに陥った場合は、Google グループからのこの関連する質問を参照してください。基本的に、Cookie は十分な速さで設定されないため、JavaScript クライアント ライブラリがチェックしても何も検出されず、OAuth 認証ページにリダイレクトされます。解決策は、チェックが完了する前にわずかな遅延を追加するか、ページの読み込み時に承認を行う代わりに、承認を開始するログイン ボタンを使用することです。

また、同じドメインにあるページに画像を追加する必要があります。DOM 内にある限り、CSS で非表示にすることができます。

上記のブログ投稿の例を使用すると、JavaScript だけでドキュメント リストを取得できました。無限の承認ループを取り除くために使用した変更された初期化関数を次に示します。

function initialize() {
    var scope = 'http://docs.google.com/feeds/';

    if (google.accounts.user.checkLogin(scope)) {
        var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0');   
        service.getFeed(scope + 'documents/private/full/', handleFeed, handleError);  
    } else {
        var loginButton = $("<button>Click here to login</button>");
        loginButton.click(function() {
            var token = google.accounts.user.login(scope); // can ignore returned token  
        });
        $("body").append(loginButton);
    }
};  
​
于 2010-06-18T23:09:43.360 に答える
3

サーバー側でプロキシを実行するコードを記述し、jQuery に呼び出させることを検討してください。

  • PHP を使用している場合は、curl.
  • Java を使用している場合は、URLConnectionまたはより便利なApache HttpClientを使用してください。
  • C#/.NET を使用している場合は、WebClient.
  • Ruby を使用している場合は、Net::HTTP.
于 2010-06-18T22:24:28.327 に答える
0

Access-Control-Allow-Origin適切なヘッダーを送信することにより、外部ドメインで許可されている限り、可能です。次にXMLHttpRequest、標準のクロスドメイン XHR API をサポートするブラウザーとXDomainRequestIE で API を使用します。

于 2010-06-19T01:07:04.560 に答える