首先,我知道如何使用访问令牌(例如
)对Google进行典型的POST$.post('https://accounts.google.com/o/oauth2/token', {
refresh_token: localStorage.refresh_token,
client_id: my_client_id,
grant_type: 'refresh_token'
}).done(...}).fail(...});
但是,现在我尝试在Google电子表格中插入一行。这里有两种情况。
所以看起来好像第一个场景是在幕后进行一些我不在(2)中复制的配置。 SpreadSheet API上的文档说我需要设置一个授权标题,以便将此行提交到电子表格。我不知道该怎么做(我希望文档在那里给出一个例子),但看起来我可以使用jQuery beforeSend
中的ajax
设置手动设置标题方法。要提交到电子表格,请求的contentType
必须为application/atom+xml
,这意味着我需要使用$.ajax()
而不是更简单的$.post()
(我认为)。
要清楚,当我通过正式登录过程获取访问令牌(我目前不在请求中使用)时,一切都很有效。但它在第二种情况下不起作用。
我使用Postman跟踪了一个类似的POST请求并查看了标题和cookie以查看是否有任何授权标题,但我没有看到它。我现在已经查看了一天中的大量信息,并且无法弄清楚我到底需要做什么。
如果重要,请求来自PhoneGap Android应用程序。
如何将标头设置为正确的凭据?
这是我的代码:
function postRowFromDatabaseToGoogleSpreadsheet(row) {
var spreadsheetApiUrl = "https://spreadsheets.google.com/feeds/list/myspreadsheet-key/1/private/full";
var xml = "<entry xmlns='http://www.w3.org/2005/Atom' " +
"xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'>" +
"<gsx:{0}>{1}</gsx:{0}>".format("id", row.id) +
"<gsx:{0}>{1}</gsx:{0}>".format("coverage", row.coverage) +
"<gsx:{0}>{1}</gsx:{0}>".format("date", row.date) +
"<gsx:{0}>{1}</gsx:{0}>".format("time", row.time) +
"<gsx:{0}>{1}</gsx:{0}>".format("comments", row.comments) +
"<gsx:{0}>{1}</gsx:{0}>".format("kwhr", row.kwhr) +
"<gsx:{0}>{1}</gsx:{0}>".format("mlwater", row.mlwater) +
"<gsx:{0}>{1}</gsx:{0}>".format("tabletid", row.tabletid) +
"</entry>";
console.log("Submitting to URI: " + spreadsheetApiUrl);
console.log("Xml to submit: \n" + xml);
$.ajax({
type: "POST",
//headers:
beforeSend: function(xhr) {
console.log("beforeSend");
console.log(xhr);
xhr.done(function() {
console.log(xhr.responseText);
console.log(xhr.getAllResponseHeaders());
}).fail(function() {
console.log("xhr failed...");
});
},
url: spreadsheetApiUrl,
data: xml,
contentType: "application/atom+xml",
crossDomain: true
}).done(function(response) {
console.log("post succeeded");
if (response == null) {
console.log("response was null");
} else {
console.log(response);
}
}).fail(function(error) {
console.log("post failed");
console.log(error);
}).always(function() {
console.log("post completed");
});
}
答案 0 :(得分:0)
发现您可以在网址中传递令牌或作为标头传递令牌。
要传入网址,请在网址中添加参数access_token={Your token here}
。
$.ajax({
type: "POST",
headers: {
Authorization: "Bearer " + localStorage.access_token
},
url: url,
data: {},
contentType: "application/json"
})
.done(function(response) {
// snip
})
.fail(function(error) {
//snip
})