[英]HTTP POST to Google Sheets (via Apps Script) not importing JSON body message contents?
我設計了一個 web 應用程序,它通過 HTTP POST 和 Google Apps 腳本將訂單信息發布到 Google 表格。 但是,我正在努力發布並從正文 JSON 中提取訂單信息。 我嘗試了 2 種不同的方法,它們都 output 具有相似的信息但具有相同的數據類型 - FileUpload。 我什至嘗試將其作為 FormData() 的參數導入,但反復附加參數感覺不太正確。
方法一
function method1() {
var xml = new XMLHttpRequest();
var data = JSON.stringify({ firstName: "Jay", lastName: "Smith" });
xml.open("POST", url, true);
/* xml.setRequestHeader("Content-type", "application/json"); */
xml.onreadystatechange = function () {
if (xml.readyState === 4 && xml.status === 200) {
alert(xml.responseText);
}
};
xml.send(data);
}
Output
{postData=FileUpload, contextPath=, contentLength=38.0, parameters={}, parameter={}, queryString=}
注意 setRequestHeader() function 是如何被注釋的。 如果取消注釋將內容類型設置為 JSON,則不會出現 output。 為什么它不起作用?
方法二
function method2() {
const body = {
firstName: "Jay",
lastName: "Smith",
};
const options = {
method: "POST",
body: JSON.stringify(body),
};
fetch(url, options).then((res) => res.json());
}
Output
{contextPath=, parameters={}, parameter={}, queryString=, postData=FileUpload, contentLength=38.0}
方法3(我什至應該考慮這個嗎?)
function method3() {
const formData = new FormData();
formData.append("firstName", "Jay");
formData.append("lastName", "Smith");
fetch(url, {
method: "POST",
body: formData,
}).then((res) => res.json());
}
Output
{contentLength=243.0, parameter={firstName=Jay, lastName=Smith}, queryString=, contextPath=, parameters={lastName=[Ljava.lang.Object;@6c4aece6, firstName=[Ljava.lang.Object;@3c461e46}}
內容長度要大得多……這似乎不是一個有效的概念。
Google Apps 腳本 doPost() Function
function doPost(e) {
const sheet = SpreadsheetApp.openById(SHEETID).getSheetByName('Testing Inputs');
sheet.getRange(3,1).setValue(e); // To display POST output
const data = JSON.parse(request.postData.contents)
sheet.getRange(5,1).setValue(data['firstName']) // Not writing "Jay"?
sheet.getRange(5,2).setValue(data['lastName']) // Not writing "Smith"?
}
一般來說,根據 contentLength output 判斷,似乎數據是作為正文消息內容通過的,但考慮到 postData 是 FileUpload,它不是 JSON 嗎? 這可能會導致我的 Apps 腳本也無法提取它嗎? 另外,我認為我讀到使用 fetch() 比使用 XMLHttpRequest() 好得多,所以我應該使用我的方法 2 嗎? 仍然不確定使用 Apps 腳本將其填充到工作表中的單個單元格中我做錯了什么?
任何幫助表示贊賞!
Output 使用sheet.getRange(3,1).setValue(JSON.stringify(e))
{"parameter":{},"postData":{"contents":"{\"firstName\":\"Jay\",\"lastName\":\"Smith\"}","length":38,"name":"postData","type":"text/plain"},"parameters":{},"contentLength":38,"queryString":"","contextPath":""}
基於sheet.getRange(3,1).setValue(JSON.stringify(e))
提供的 output (我不確定你的哪個方法生成了這個,但那個方法看起來是正確的),你的doPost
所寫的應該可以工作,有一個修改:我沒有看到定義的變量request
,所以我假設您打算request
成為 http 請求doPost
,在應用程序腳本e
中定義文檔)。 因此更改此行
const data = JSON.parse(request.postData.contents)
對這個
const data = JSON.parse(e.postData.contents)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.