访问XMLHttpRequest Google Apps脚本中的参数

时间:2016-06-10 03:52:44

标签: javascript google-apps-script xmlhttprequest

我目前正在尝试使用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

1 个答案:

答案 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);