我正在尝试使用Gmail REST API将邮件标记为已读。
$('#markGmailRead').click(function(){
var request = $.ajax({
type: 'POST',
dataType: 'json',
headers: { "Authorization": "Bearer <<ACCESS KEY>>",
"Content-Type": "application/json"},
url: 'https://www.googleapis.com/gmail/v1/users/me/messages/<<MESSAGEID>>/modify',
data: {"addLabelIds": ["UNREAD"]}
})
request.done(function(data){
// when the Deferred is resolved.
console.log(data);
})
request.fail(function(){
// when the Deferred is rejected.
console.log('fail');
})
})
这导致返回以下json:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "parseError",
"message": "Parse Error"
}
],
"code": 400,
"message": "Parse Error"
}
}
还有其他人经历过这个吗?我对可能造成这种情况的原因感到茫然。
答案 0 :(得分:2)
我能够弄明白这一点并让它发挥作用。唯一的区别是像这样对数据进行字符串化:
data: JSON.stringify({"removeLabelIds":["UNREAD"]}),
进行此更改使其有效。
答案 1 :(得分:1)
尝试添加ContentType =&#34; application / json;字符集= UTF-8&#34;在代码中。另外,请检查此link以获取有关错误的详细信息。
如果您仍然看到错误,请告诉我。
答案 2 :(得分:1)
我在Meteor中遇到同样的问题。问题是我在'params'属性中传递了removeLableIds。更改为“数据”属性,即
var apiUrl = "https://www.googleapis.com/gmail/v1/users/me/messages/"
+ messageID + "/modify";
var result = HTTP.post( apiUrl, {
data: { "removeLabelIds": ["INBOX"] },
headers:{
"content-type":"application/json ; charset=UTF-8",
"Authorization": "Bearer " + tokens.accessToken
}
});