我见过这个问题的不同版本,但我似乎无法理解答案。我有以下代码每小时运行一次,将电子邮件中的信息发送到我的Wix网站以解析信息。一旦该功能从我的Wix网站得到回报,我想触发另一个功能来通知用户:
var POST_URL = "https://www.myWixSite.com/_functions/shiurAddition";
var EMAIL_URL = "https://www.myWixSite.com/_functions/shiurNotify";
function gmailInboxToWix() {
var oldLabel = GmailApp.getUserLabelByName("toBeProcessed");
var newLabel = GmailApp.getUserLabelByName("ProcessedByScript");
var threads = oldLabel.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var HTML = messages[j].getBody()
var Date = messages[j].getDate()
messages[j].markRead()
var data = {Date: Date, HTML: HTML};
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
},
"payload": data
};
var response = UrlFetchApp.fetch(POST_URL, options)
Logger.log(response)
var emailResponse = UrlFetchApp.fetch(EMAIL_URL, response);
}
threads[i].removeLabel(oldLabel).refresh();
threads[i].addLabel(newLabel);
}
}
当运行这个时,我从谷歌得到一个错误:
异常:错误值(第24行,文件"代码">
第24行是这样的代码:
var emailResponse = UrlFetchApp.fetch(EMAIL_URL, JSON.stringify(response));
问题
尝试使用字符串对象代替高级参数
解释
根据文件,fetch()
方法有两个参数:
- 向发出请求的URL(必需(
- 具有高级配置参数的对象(可选(
因此,传递Object
实例以外的任何东西都将失败:
JSON.stringify()
返回字符串,因此是无效的数据类型fetch()
方法返回HTTPResponse
的一个实例,该实例也是无效的
解决方案
正如Tanaike所建议的,在第一次请求之后,但在第二次请求之前,将payload
参数更改为响应的内容,然后使用options
,而不是response
:
options.payload = response.getContentText();
票据
- 有一个
contentType
高级参数,使用它来设置类型,其余的将由服务处理,您不需要显式设置头