Передача и возврат массива между HTML и Google Apps Script

#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);
}