[英]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.