2017-09-14 286 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