У меня есть сценарий приложения Google, который записывает данные формы в электронную таблицу при отправке на мой сайт.Получение определенной части e.parameter
У меня есть много разных форм, и я бы хотел записать их данные в одну и ту же таблицу, но в разные «Таблицы» (например, «tabs @ 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'ing в Google App Script:
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 «)
Почему бы вам не взглянуть на него, чтобы посмотреть, как он построен? используйте 'Logger.log (JSON.Stringify (e))' –
AFAIK журнал работает только тогда, когда скрипт запускается в браузере, а не на сайте, который он выполняется, поэтому он совершенно бесполезен – SamYoungNY