2011-09-15 22 views
18

我試圖做一個Ajax請求與以下安裝的谷歌聯繫人API:jQuery的JSONP 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

+0

什麼版本的jQuery你正在用嗎? – Joe

+0

jQuery .ajax確實有'用戶名'和'密碼'字段,如果需要,它將爲您執行基本認證 –

回答

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

編輯:看起來不能用JSONP來完成。 Modify HTTP Headers for a JSONP request

+0

'xhr.setRequestHeader'也不起作用。看起來我需要讀一讀你關聯的問題。 –

+0

它完全適合我。謝謝安德魯。 –

-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

好的,但這不是JSONP ajax請求。這是簡單的ajax請求。 –

+0

即使其JSONP,「headers」選項也應該有效。請求標頭是HTTP協議的一部分,JSONP是應用程序/瀏覽器級別的黑客。 – rynop

2

當需要在跨域請求認證,你必須使用某種形式的代理服務器。

由於使用dataType: jsonp導致HTTP請求實際上是由添加到DOM的腳本實現的,因此將不會使用$.ajax中設置的標頭。