#html #arrays #google-apps-script
#HTML #массивы #google-apps-script
Вопрос:
Я пытаюсь создать панель поиска для таблицы Google, используя Google Apps Script и HTML. По сути, я беру вводимые пользователем данные для поиска из формы (имя, дата и ключевые слова) и передаю их в свой файл GScript для выполнения поиска. Мне нужен массив индексов, содержащий строки листа, которые соответствуют критериям поиска. Я знаю, что фактическая поисковая часть скрипта работает; однако моя проблема возникает при передаче массива целых чисел обратно в HTML.
Прямо сейчас у меня есть это так, что я инициализирую пустой массив на стороне HTML моего кода и передаю его в GScript. Он должен вернуть массив, а затем я проверяю, является ли длина массива пустой. Однако я получаю сообщение об ошибке, в котором говорится: «Не удается прочитать свойство «length» из null».
function gatherSearch() {
clearErrorWarnings();
var responsible = document.getElementById('responsible').value;
var datefrom = formatDate(document.getElementById('datefrom').value);
var dateto = formatDate(document.getElementById('dateto').value);
var description = document.getElementById('description').value;
var searchRowMatch = [];
if(checkValidSearch(responsible, datefrom, dateto, description)) {
searchRowMatch = google.script.run.basicSearch(responsible, datefrom, dateto, description, searchRowMatch);
if(searchRowMatch.length == 0) {
noSearchMatch();
}
}
}
Я понимаю, что есть что-то в том, что GScript работает асинхронно с HTML или что-то в этом роде? Любой указатель в правильном направлении или объяснение того, как это исправить, было бы здорово 🙂 Спасибо!
Комментарии:
1.
gs.run()
не возвращает возвращаемое значение выполняемой функции, но возвращает объект script runner, который бесполезен для того, что вы хотите сделать. ИспользуйтеwithSuccessHandler()
.2. Смотрите с помощью successHandler в этой статье developers.google.com/apps-script/guides/html/reference/run
Ответ №1:
РЕДАКТИРОВАТЬ: Довольно простое исправление, просто добавлен тег withSuccessHandler()
if(checkValidSearch(responsible, datefrom, dateto, description)) {
google.script.run.withSuccessHandler(createTable).basicSearch(responsible, datefrom, dateto, description, searchRowMatch);
}