我有一个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.parameter
(form-type
),以便能够辨别使用哪种表单并进行相应的路由?
有关详情,请参阅(https://github.com/dwyl/html-form-send-email-via-google-script-without-server&#34;)
答案 0 :(得分:2)
来自doGet parameter文档:
第二个参数称为parameter
,它是一个包含每个参数和值对的对象
所以,比如:
var type = e.parameter['form-type'];
应该有用吗?