获取e.parameter的特定部分

时间:2016-11-18 22:22:10

标签: javascript html json google-apps-script xmlhttprequest

我有一个Google App脚本,可以在我的网站上提交时将表单数据写入电子表格。

我有许多不同的表单,我想将他们的数据写入同一个电子表格,但是要写入不同的表格。 (即制表符@ bottom" form1,form2,form3")。

每个表单都有一个隐藏的输入来命名它。我认为通过隔离输入名称,我可以编写一个if statement,将表单数据推送到右侧工作表。

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 - 处理POST和Google App脚本的数据:

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

编码数据如下所示:

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

负责填充电子表格的Google App Script功能是:

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

如何访问我需要的特定e.parameterform-type),以便能够辨别使用哪种表单并进行相应的路由?

有关详情,请参阅(https://github.com/dwyl/html-form-send-email-via-google-script-without-server&#34;)

1 个答案:

答案 0 :(得分:2)

来自doGet parameter文档:

第二个参数称为parameter,它是一个包含每个参数和值对的对象

所以,比如:

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

应该有用吗?