2016-11-18 2 views
0

У меня есть сценарий приложения 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 «)

+0

Почему бы вам не взглянуть на него, чтобы посмотреть, как он построен? используйте 'Logger.log (JSON.Stringify (e))' –

+0

AFAIK журнал работает только тогда, когда скрипт запускается в браузере, а не на сайте, который он выполняется, поэтому он совершенно бесполезен – SamYoungNY

ответ

2

Из doGet parameter документации:

Второй параметр называется parameter, и это объект, содержащий каждый параметр и значение пары

Итак, что-то вроде:

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

Должен ли работать?

+0

спасибо - я попробовал варианты этого бесплодно , единственное отличие состоит в том, что я не хранил в переменной, может быть, это была проблема? В любом случае это сработало - еще раз спасибо! – SamYoungNY