我目前正在尝试使用Google Apps脚本访问POST请求的参数。我可以使用e.parameter记录params对象,虽然我似乎无法通过使用e.parameter.name来访问对象的键。
的XMLHttpRequest
var http = new XMLHttpRequest();
var url = "myappURL";
var params = JSON.stringify({employeeStatus: "Active", name: "Henry"});
http.open("POST", url, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//Call a function when the state changes.
http.onreadystatechange = function() {
// call back function
} // end callback
http.send(params);
Google Apps脚本
function doPost(e) {
if (typeof e !== 'undefined') {
Logger.log(e.parameter.name); // does not work (undefined)
} // end if
} // end doPost
答案 0 :(得分:0)
有一些微妙的怪癖,通过http提供数据的方式不同。例如,当json数据的常用标题是Content-Type:application / json时,我注意到你正在使用Content-type“application / x-www-form-urlencoded”。
我添加了一行只返回e变量的内容,以便您可以看到返回的内容。
我使用curl使用以下命令调试它。
curl -H "Content-Type: application/json" ---data "{status:123}" https://script.google.com/macros/s/AKfycbyJ38V-HpG7A-DxIBpik4HJ89fAtnCemCJ7ZXeFEL8KPEuGsR8/exec
我收到的回复是:
{"parameter":{},"contextPath":"","contentLength":12,"queryString":null,"parameters":{},"postData":{"length":12,"type":"application/json","contents":"{status:123}","name":"postData"}}
你可以看到,在我的情况下,json是在contents字段而不是参数中返回的。
您可以尝试使用脚本来查看所获得的内容。您也可以尝试更改内容类型。
经过进一步测试后,我认为您最好提交表单数据而不是json。我已经能够通过修改你的javascript来恢复游戏:
var http = new XMLHttpRequest();
var url = "https://script.google.com/macros/s/AKfycbyJ38V-HpG7A-DxIBpik4HJ89fAtnCemCJ7ZXeFEL8KPEuGsR8/exec";
var params = "employeeStatus='Active'&name='Henry'";
http.open("POST", url, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//Call a function when the state changes.
http.onreadystatechange = function() {
if (http.readyState==4) {
//alert the user that a response now exists in the responseTest property.
console.log(http.responseText);
// And to view in firebug
// console.log('xhr',xmlhttp)
}
} // end callback
http.send(params);