2016-01-19 2 views
0

С этого article от Мартина Hawksey, резюмировать:Доступ несколько значений параметров в Службах Google Script

сценарий, связанный с листа публикуется как веб-приложение, форма использует JQuery в $ .ajax отправить запрос, что веб-приложение, а веб-приложение обрабатывает параметры в столбцах листа с заголовками, соответствующими именам каждого параметра. (сценарий в этой статье использует PublicLock, который я заменил на ScriptLock)

Проблема связана с флажками. Внутри запроса, я буду видеть

...fruit=apple&fruit=banana&fruit=cantaloupe... 

и Apps Script будут видеть это, а также, проходя e к функции handleResponse() который срабатывает от doPost(e). Чтобы получить доступ к значениям параметров в запросе, мы используем e.parameter или e.parameters. Я выбрал последнее для размещения флажков и нескольких значений для этого конкретного параметра.

Однако, что не происходит, это именно то, что передается только первое значение флажка. Для того, чтобы перебирать Params, мы используем

for (i in headers) { 
    if (headers[i] == "Timestamp") { 
    row.push(new Date()); 
    } else { 
     row.push(e.parameters[headers[i]]); 
    } 
} 

раздвинуть значения для каждого параметра, который соответствует заголовку столбца в новый массив, который будет введен в качестве новой строки. Чтобы сделать это, Hawksey использует

sheet.getRange(nextRow, 1, 1, row.length).setValues([row]) 

я думаю у меня возникают проблемы с пониманием того, что e.parameters делает и как я могу получить доступ к этим ценностям. Я понимаю, что свойство parameters содержит значения каждого имени как arrays, но я не могу получить весь список элементов массива как значение для ячейки в строке. Может кто-нибудь помочь мне понять, что делает e.parameters, и как я могу лучше добраться до всех значений, которые мне нужны?

ответ

2

e.parameters - объект, в котором параметры являются объектными ключами, а значения хранятся в массиве. Таким образом, запрос, как это:

url?fruit=apple&fruit=orange&fruit=lime&animal=giraffe 

даст объект так:

{'fruit': ['apple', 'orange', 'lime'], 'animal': ['giraffe']} 

Если вы должны поместить все значения fruit в одну ячейку, вы можете попробовать:

e.parameters.fruit.join(',') 

, который вернет строку с каждым значением, разделенным запятой. Затем, если вам нужно снова отделить значения, вы можете использовать String.split() (docs here).

+0

Вы также можете упомянуть, что (скудная) документация о параметрах 'doGet (e)' находится здесь (https://developers.google.com/apps-script/guides/ui-service#doGetParams), как часть документов для устаревшего пользовательского интерфейса. (На самом деле это должно быть где-то более заметным.) – Mogsdad

+1

На самом деле [веб-приложения и гаджеты сайтов Google] (https://developers.google.com/apps-script/guides/web#url_parameters) имеет лучшую часть. – Mogsdad

Смежные вопросы