Передача параметров из диалога в серверный скрипт - PullRequest
0 голосов
/ 23 января 2019

У меня есть шаблон листа Google. Каждый раз, когда он открывается, я хотел бы открыть диалоговое окно, чтобы получить два параметра и передать эти параметры в сценарий, связанный с шаблоном листа Google. До сих пор мне удалось определить и открыть диалог. Но параметры не отображаются в сценарии на стороне сервера.

Кажется, что readFormData не вызывается, когда я нажимаю кнопку "Создать". Если я заменю readFormData на google.script.host.close (), диалоговое окно закроется. Но не с readFormData. Та же проблема идет с close (). Поэтому я считаю, что скрипт Java не выполняется.

РЕДАКТИРОВАТЬ: я решил проблему с обходным путем. Я заменил onclick = "readFormData" на onclick = "google.script.run.withSuccessHandler (google.script.host.close) .getFormData (this.parentNode)", а затем все работает как положено. (также потребовалось внести некоторые изменения на стороне GS). Однако я не могу понять, почему я не могу вызвать свою собственную процедуру JavaScript JavaScript readFormData (). С помощью справочной формы Chrome Developer Tool я могу заметить, что readFormData не определен, вызывая исключение «Uncaught ReferenceError: readFormData не определен». Он срабатывает каждый раз, когда я нажимаю на кнопку. Таким образом, я предполагаю, что это должна быть синтаксическая ошибка, которая обманывает анализатор или подобное.

GS:

function getFormData(obj) {

  Logger.log(obj);
  return "hello";
}


function openDialog() {
  var html = HtmlService.createHtmlOutputFromFile('index');
  SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
     .showModalDialog(html, 'Create file');
}


function onOpen(e) {

   openDialog(); 
}

HTML:

        <!DOCTYPE html>
        <html>
           <head>
              <base target="_top">
              <link rel="stylesheet" 
                  href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
           </head>
           <body>

           <form id="getSomeData">
             <div class="inline form-group">
               <label for="fname">Destination</label>
               <input type="text" name="fname" style="width: 150px;">
             </div>

             <div class="inline form-group">
                <label for="date">Date</label>
                <input type="text" name="date" style="width: 40px;">
             </div>

             <div>
                <input type="button" class = "action" value= "Create" onclick="readFormData()" >     
             </div>

           </form>

   <!--  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> -->

    <script>

       function success(msg) {        // I have fixed the ((msg) error
         alert(msg);
       }


       function readFormData(){
          console.log("readFormData");
          var form = document.getElementById("getSomeData").elements;
          var obj ={};
          for(var i = 0 ; i < form.length ; i++){
            var item = form.item(i);
            obj[item.name] = item.value;
          }
          google.script.run.withSuccessHandler(close).getFormData(obj);
       }

       function close(){
         google.script.host.close();
       }
    </script>
  </body>
</html>

1 Ответ

0 голосов
/ 23 января 2019

Мне кажется, есть опечатка в функции "успеха", которая может привести к проблеме интерпретации:

успех ( ( msg).

Вы пробовали без этого "("?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...