2017-09-14 237 views
0

我正在尝试使用google api在gmail中创建草稿。发布请求body google api

授权后我无法使用POST发送请求正文。这是我的代码的简化版本。

var token = hash[1].split('=')[1]; // getting token 
var body = "some text"; 
var base64message = Base64.encode(body); //uses base64 library to encode message 
var params ={ 
    "message": { 
     "raw": base64message 
    } 
} 
var request = new XMLHttpRequest(); 
request.onload = function(){ 
    console.log(this.responseText); // parseError 
} 

request.open('POST','https://www.googleapis.com/gmail/v1/users/me/drafts?access_token='+token,true); 
request.send(JSON.stringify(params)); 

解决忘记这样:

request.setRequestHeader( '内容 - 类型', '应用/ JSON');

回答

1

相反的:

request.onload = function(){ 
    console.log(this.responseText); // parseError 
} 

使用onreadystatechange之后,你问if(this.readyState == 4 && this.status == 200){

  1. this.readyState == 4意味着请求完成或加工
  2. this.status == 200意味着它也成功。

.onload被添加到XMLHttpRequest 2中,而onreadystatechange自原来的规范以来一直存在。 .onload仅等于this.readyState == 4

所以,你的代码看起来就像这样:

var token = hash[1].split('=')[1]; // getting token 
var body = "some text"; 
var base64message = Base64.encode(body); //uses base64 library to encode message 
var params ={ 
    "message": { 
     "raw": base64message 
    } 
}; 

var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     console.log(this.responseText); 
    } 
}; 

request.open('POST','https://www.googleapis.com/gmail/v1/users/me/drafts?access_token='+token,true); 
request.send(JSON.stringify(params)); 
+0

谢谢,但这并不解决问题。我获得了400的地位,这就是为什么我改变onload看看谷歌有什么要说。 – PenPen

+0

@PenPen 400表示请求格式不正确。换句话说,客户端发送到服务器的数据流并不遵循规则。 – PredatorIWD