2011-09-15 9 views
18

を設定されていない私には、以下の設定でGoogleの連絡先のAPIへのAJAXリクエストを作るためにしようとしている:jQueryのJSONPアヤックス、認証ヘッダ

$.ajax({ 
    url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all", 
    dataType: 'jsonp', 
    data: { 
    alt: 'json-in-script' 
    }, 
    headers: { 
    'Authorization': 'Bearer ' + token 
    }, 
    success: function(data, status) { 
    return console.log("The returned data", data); 
    } 
}); 

しかし、認証ヘッダがセットされますしていないようです。何か案は?

The request

+0

のjQueryのバージョンは何使っていますか? – Joe

+0

jQuery .ajaxには、必要に応じて基本認証を行う 'username'と 'password'フィールドがあります。 –

答えて

23

私は最近、同じ問題を抱えていました。これを試してください:

$.ajax({ 
    url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all", 
    dataType: 'jsonp', 
    data: { 
    alt: 'json-in-script' 
    }, 
    success: function(data, status) { 
    return console.log("The returned data", data); 
    }, 
    beforeSend: function(xhr, settings) { xhr.setRequestHeader('Authorization','Bearer ' + token); } 
}); 

EDIT:JSONPではできないようです。 Modify HTTP Headers for a JSONP request

+0

'xhr.setRequestHeader'も機能しません。リンク先の質問を読んでみる必要があるようです。 –

+0

それは私にとって完璧に機能します。 Andrewに感謝します。 –

-1

ただ、これを行う(jqueryの2.0が、以前のバージョンで動作するはずです)

$.ajax({ 
     url: "/test", 
     headers: {"Authorization": "Bearer " + $('#myToken').val()} 
    })   
    .done(function (data) { 
     console.log(data); 
    }) 
    .fail(function (jqXHR, textStatus) { 
     alert("error: " + textStatus); 
    }); 
+0

OKですが、これはJSONP ajaxリクエストではありません。これは普通のAjaxリクエストです。 –

+0

'headers'オプションはJSONPであっても有効です。リクエストヘッダはHTTPプロトコルの一部であり、JSONPはアプリケーション/ブラウザレベルのハックです。 – rynop

2

認証は、クロスドメインリクエストで必要とされるとき、あなたはいくつかの種類のプロキシサーバーを使用する必要がありますが。

dataType: jsonpを使用すると、実際にHTTP要求がDOMに追加されるスクリプトから作成されるため、$.ajaxに設定されたヘッダーは使用されません。

0

ですがのOAuth2 RESTリソースのほとんどが

http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#query-param

要求URLの一部として、access_tokenはパラメータをしてください受け入れることを、代わりに次のコードを試してみてくださいようだ:

$.ajax({ 
      dataType: 'jsonp', 
      url: url,     
      data: { 
       'access_token':token.access_token 
      }, 
      jsonpCallback: 'thecallback', 
      success: function(data){ 
       _cb(data); 
      }, 
      error: function(d){ 
       _cb(d); 
      } 
     });