jQuery JSONP ajax,未设置身份验证标头

时间:2011-09-15 15:38:14

标签: javascript jquery http-headers jsonp

我正在尝试使用以下设置向google contacts API发出ajax请求:

$.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

4 个答案:

答案 0 :(得分:24)

我最近遇到了同样的问题。试试这个:

$.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); } 
});

编辑:看起来无法用JSONP完成。 Modify HTTP Headers for a JSONP request

答案 1 :(得分:3)

在跨域请求中需要身份验证时,您必须使用某种代理服务器。

由于使用dataType: jsonp导致HTTP请求实际上是从添加到DOM的脚本中生成的,因此将不会使用$.ajax中设置的标头。

答案 2 :(得分:0)

似乎大多数OAUTH2 REST资源都接受access_token参数作为请求URL的一部分

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

请尝试使用以下代码:

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

答案 3 :(得分:-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);
    });