互联网上没有任何地方是这个特定的问题或者提到它的修复,所以这里是:
我的应用包含以下doGet()
和doPost()
功能:
function doGet (e){return ContentService.createTextOutput("User says: "+JSON.stringify(e))}
function doPost(e){return ContentService.createTextOutput("User says: "+JSON.stringify(e))}
GET http://*published URL*/+params
返回:
User says:
{
"queryString":"testparamA=abc&testparamB=bcd&testparamC=cde",
"parameter":
{
"testparamA":"abc",
"testparamB":"bcd",
"testparamC":"cde"
},
"contextPath":"",
"parameters":
{
"testparamA":["abc"],
"testparamB":["bcd"],
"testparamC":["cde"]
},
"contentLength":-1
}
然而,POST http://*published URL*/+params
返回:
User says:
{
"queryString":null,
"parameter":{},
"contextPath":"",
"parameters":{},
"contentLength":0
}
我的目标是访问POST
个参数。但是当使用POST
方法传输时,似乎阻止脚本获取它们。 GET
似乎工作正常。
我缺少什么,解决方案是什么?
答案 0 :(得分:5)
使用您发布的完全相同的代码,POST和GET对我来说非常合适。我的猜测是你没有正确测试POST。
这是我发布的网址。后面的代码是样本的复制/粘贴 -
https://script.google.com/macros/s/AKfycbzWZv9WUp7rUtOxZhhwuXPpuNXuvPGpiHyrcYrPeNLiusOWzazo/exec
从http://hurl.it(浏览器中的简单REST测试程序)进行测试,并且没有任何问题。
请求(请务必检查以下重定向) -
响应(重定向GET和POST一次性ContentService URL后的响应)
答案 1 :(得分:2)
我认为这有点预期。当人们执行HTTP GET
时,会在网址上传递参数。当它是POST
时,它们会进入有效载荷,而不是网址。
尝试像这样调用帖子(Apps脚本代码):
UrlFetchApp.fetch(scriptUrl, {method:'post', payload:'param1=value1¶m2=value2'});
答案 2 :(得分:0)
然而,我遇到了同样的问题。 doGet(e)
返回参数集合,但doPost(e)
没有。查看脚本日志中的值e
:
DoGet记录下来:
{queryString=param1=value1¶m2=value2¶m3=value3,
parameter={param1=value1, param2=value2, param3=value3},
contextPath=,
parameters={param1=[value1], param2=[value2], param3=[value3]},contentLength=-1}
DoPost记录此信息:
{queryString=lib=Ma1kfpb2uwfs976NQh3S0GV_Vnss8VuKo&appId=u33198874110&formId=xxxxxxxxxxxx&token=AJuLMu2XVXMgpvS-7l6mWLVDmxjYMA6ZEQ:1393694820550&gm1xs=&service=AKfycbzfP8gYQknL9dNG6SVf0LmPYy3xiEAtyFQ8AvJDwfs,
parameter={gm1xs=, lib=Ma1kfpb2uwfs976NQh3S0GV_Vnss8VuKo, appId=u33198874110, param1=value1, formId=u33198874111, token=AJuLMu2XVXMgpvS-7l6mWLVDmxjYMA6ZEQ:1393694820550, param2=value2, param3=value3, service=AKfycbzfP8gYQknL9dNG6SVf0LmPYy3xiEAtyFQ8AvJDwfs},
contextPath=, contentLength=341}
所以在doGet
中循环遍历e.parameters
是微不足道的,但在doPost
中,您必须循环遍历e.parameter
,并处理表单中的其他参数你不在乎的。