2016-06-10 9 views
0

Ich bin derzeit versucht, die Parameter eines POST-Request-Skript mithilfe von Google Apps zuzugreifen. Ich kann das params-Objekt mit e.parameter protokollieren, obwohl ich scheinbar nicht auf die Schlüssel des Objekts zugreifen kann, indem ich e.parameter.name verwende.Zugangsparameter in einem XMLHttpRequest Google Apps Script

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 
+0

Vielleicht könnten Sie eine öffentliche Version dieses Skripts teilen, um sich anzusehen? – Sudsy

+0

@Sudsy [link] (https://script.google.com/d/1MxBNwUoG4I_F0Gt1GGYzNrr3m6PakhcDFxIA_g-nvoS-bRHx0IS5jgMJ/edit?usp=sharing) –

Antwort

0

Es gibt subtile Macken mit den verschiedenen Möglichkeiten, um Daten via http gestellt wird. Zum Beispiel bemerke ich, dass Sie den Inhaltstyp "application/x-www-form-urlencoded" verwenden, wenn der übliche Header für Json-Daten Content-Type: application/json ist.

Ich habe eine Linie, die nur den Inhalt der e Variable gibt, so können Sie sehen, was zurückgegeben wird.

habe ich curl es mit dem folgenden Befehl zu debuggen.

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

Die Antwort war ich erhielt:

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

Sie

, dass in meinem Fall sehen die json im Inhaltsfeld, anstatt die Parameter zurückgegeben wurde.

Sie könnten versuchen, dies mit Ihrem Skript zu sehen, was Sie erhalten. Sie könnten auch versuchen, den Inhaltstyp zu ändern.

Nach weiteren Tests ich glaube, Sie besser wäre, Ihre Felder ein Formulardaten nicht json einreichen. Ich bin in der Lage gewesen, den Paramer zurück zu erhalten, indem ich dein Javascript an folgendes ändere:

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

, wenn der Inhalt der E-Variable einzuloggen, dies ist das Ergebnis '{parameter = {{ "employeeStatus": "Aktiv", "Name": "Henry"} =}, KontextPfad =, ContentLength = 42, QueryString = Null, Parameter = {{"MitarbeiterStatus": "Aktiv", "Name": "Henry"} = [Ljava.lang.Object; @ 68bdf26b}, postdata = Fileupload} ' –

+0

die gesamte Lösung in der bearbeiteten Antwort – Sudsy

+0

es funktioniert jetzt. Deine Antwort ist großartig !!! –