Justin Kaese
Justin Kaese

Reputation: 35

Access parameters in a XMLHttpRequest Google Apps Script

I am currently trying to access the parameters of a POST request using Google Apps Script. I can logger the params object using e.parameter though i cannot seem to access the keys of the object by by using 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 Script

function doPost(e) { 
  if (typeof e !== 'undefined') {
    Logger.log(e.parameter.name); // does not work (undefined)
  } // end if
} // end doPost

Upvotes: 1

Views: 2224

Answers (1)

Sudsy
Sudsy

Reputation: 971

There are subtle quirks with the different ways data is posed via http. For instance I notice that you are using Content-type "application/x-www-form-urlencoded" when the usual header for json data is Content-Type: application/json.

I added a line that just returns the contents of the e variable so you can see what is returned.

I used curl to debug it with the following command.

curl -H "Content-Type: application/json" ---data "{status:123}" https://script.google.com/macros/s/AKfycbyJ38V-HpG7A-DxIBpik4HJ89fAtnCemCJ7ZXeFEL8KPEuGsR8/exec

The response I received was:

{"parameter":{},"contextPath":"","contentLength":12,"queryString":null,"parameters":{},"postData":{"length":12,"type":"application/json","contents":"{status:123}","name":"postData"}}

You can see that in my case the json was returned in the contents field rather than the parameters.

You could try this with your script to see what you get. You could also try changing the Content-Type.

After Further testing I think you would be better submitting your fields a form data rather than json. I have been able to get the paramer back by amending your javascript to:

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

Upvotes: 1

Related Questions