2016-11-18 4 views
0

Ich habe ein Google App-Skript, das Formulardaten in eine Tabelle schreibt, wenn es auf meiner Website eingereicht wird.Einen bestimmten Teil von e.parameter erhalten

Ich habe viele verschiedene Formen, und ich würde gerne ihre Daten in die gleiche Tabelle, sondern auf andere "Tabellen" (d. H. Tabs @ unten "form1, form2, form3") innerhalb schreiben.

Jedes Formular hat einen versteckten Eingang, der es benennt. Ich denke, dass ich durch das Isolieren des Eingabe-Namens eine if statement schreiben kann, die die Formulardaten auf dem rechten Blatt verschiebt.

Beispiel HTML:

<input type="hidden" name="form-type" value="form1"> 
*Name: <input type="text" name="john"> 

<input type="hidden" name="form-type" value="form2"> 
*Name: <input type="text" name="peter"> 

Javascript auf der Website - die Daten für POST'ing zu Google App Script Handhabung:

function handleFormSubmit(event) { // handles form submit withtout any jquery 
    event.preventDefault();   // we are submitting via xhr below 
    var data = getFormData();   // get the values submitted in the form 

    var url = event.target.action; 
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', url); 

    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

    // url encode form data for sending as post data 
    var encoded = Object.keys(data).map(function(k) { 
     return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]); 
     }).join('&'); 
     console.log("ENCODED IS: " + encoded); 
xhr.send(encoded); 
} 
} 

Die codierten Daten sieht wie folgt aus:

ENCODED IS: form-type=form1&name=john 
       OR 
ENCODED IS: form-type=form2&name=paul 

Die Google App Script-Funktion, die für das Füllen der Tabelle zuständig ist, lautet:

try { 
    var doc  = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key")); 
    var sheet = doc.getSheetByName('form1'); // here is where to define which sheet a response should be added to 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; 
    var nextRow = sheet.getLastRow()+1; // get next row 
    var row  = [ new Date() ]; // first element in the row should always be a timestamp 
// loop through the header columns 
for (var i = 1; i < headers.length; i++) { // start at 1 to avoid Timestamp column 
    if(headers[i].length > 0) { 
    row.push(e.parameter[headers[i]]); // add data to row 
    } 
} 
// more efficient to set values as [][] array than individually 
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]); 
} 
catch(error) { 
    Logger.log(e); 
} 
finally { 
    return; 
} 

Wie greife ich auf die spezifische e.parameter (form-type), die ich brauche, um in der Lage sein zu erkennen, welche Form verwendet wurde, und führen Sie es entsprechend?

Für weitere Informationen können Sie (https://github.com/dwyl/html-form-send-email-via-google-script-without-server „)

+0

Warum sollten Sie es nicht anschauen, um zu sehen, wie es gebaut wird? Verwenden Sie 'Logger.log (JSON.Stringify (e))' –

+0

AFAIK das Protokoll funktioniert nur, wenn das Skript in-Browser ausgeführt wird, nicht die Website, auf der es ausgeführt wird, so dass völlig nicht hilfreich – SamYoungNY

Antwort

2

Von der doGet parameter Dokumentation Referenz:

Der zweite Parameter parameter genannt wird, und es ist eine Aufgabe der einzelnen Parameter und Wertepaar enthält

So etwas wie:

var type = e.parameter['form-type']; 

Sollte funktionieren?

+0

Dank - ich versuchte Variationen dieser unfruchtbar Der einzige Unterschied ist, dass ich nicht in einer Variable gespeichert habe, vielleicht war das das Problem? Auf jeden Fall hat das geklappt - nochmals vielen Dank! – SamYoungNY

Verwandte Themen