Как вы запускаете функцию на стороне сервера, находясь на стороне клиента?

#javascript #html #google-apps-script #server-side #client-side

#javascript #HTML #google-apps-script #на стороне сервера #на стороне клиента

Вопрос:

Итак, у меня есть эта проблема уже несколько дней. Я пытаюсь передать данные в свой серверный скрипт, но когда я это делаю, я получаю это сообщение об ошибке. Сообщение об ошибке

Я пробовал смотреть несколько видео на YouTube, и все они говорят одно и то же, что вам нужно использовать google.script.run. Проблема возникает с функцией, которая вызывается после запуска. Вот пример кода, который я использую.

 function doGet() {
  var output = HtmlService.createTemplateFromFile("index");
  output.content = "New string being passed";
  return output.evaluate();
}
function doUpload(data){
  logger.log(data);
  Logger.log("I was called!")
}
  
  <!DOCTYPE html>
  <html>
  <head>
    <meta charset = "utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title><?= content ?></title>
  </head>
  <body>
   <h1><?= content ?></h1>
   <div id="output"></div>
   <form>
   <input type="type" name="first" id="first" value="Laurence">
   <input type="button" id="subButton" value="submit">
   </form>
   <script>
   var output = document.getElementById("output");
   var first = document.getElementById("first");
   document.getElementById("subButton").addEventListener("click", function(e){
   e.preventDefault();
   output.innerHTML = first.value;
   var myData ={"first":first.value};
   console.log("hello");
   google.script.run.doUpload(myData);
   })
   </script>
  </body>
</html>
 

Как вы можете видеть, я пытаюсь запустить doUpload (data), но он не запускается. Я уже отключил все свои учетные записи, поскольку думал, что это может быть проблемой, но это не так. Пожалуйста, помогите, спасибо!

Комментарии:

1. Возможно, вам следует добавить прослушиватель событий после загрузки html, как в window.onload . Тогда, вероятно, это сработает

2. Вы используете XMLHttpRequest с FormData на стороне клиента для отправки и получения информации с сервера.

3. @StackSlave я не согласен google.script.run.doUpload(myData); с этим.

4. О, я предполагаю, что ваш html находится в веб-приложении. Так ли это на самом деле?

5. Если этот метод отправляет и получает данные с сервера, он использует XMLHttpRequest . Общий вопрос получает общий ответ.

Ответ №1:

У меня это работает так:

  <!DOCTYPE html>
  <html>
  <head>
    <meta charset = "utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title><?= content ?></title>
  </head>
  <body>
   <h1><?= content ?></h1>
   <div id="output"></div>
   <form>
   <input type="type" name="first" id="first" value="Laurence">
   <input type="button" id="subButton" value="submit">
   </form>
   <script>
   window.onload=function() {
   var output = document.getElementById("output");
   var first = document.getElementById("first");
   document.getElementById("subButton").addEventListener("click", function(e){
     e.preventDefault();
     output.innerHTML = first.value;
     var myData ={"first":first.value};
     console.log("hello");
     google.script.run.doUpload(myData);
   });
   }
   </script>
  </body>
</html>
 

Проверьте свое представление / выполнение

Комментарии:

1. ДА. Посмотрите на них в view / executions Dec 21, 2020, 5:12:10 PM Info {first=Laurence} Dec 21, 2020, 5:12:10 PM Info I was called!

2. Я не получаю журналы. Я получаю сообщение о том, что в редакторе не выполняется функция. (Я уже скопировал вставленный ваш код)

3. Посмотрите на них в view / executions

4. Да, это то, что я делаю. Я не знаю, почему, но теперь я получаю null в журнале [20-12-21 18:11:14:243 CST] null [20-12-21 18:11: 14:245 CST] Меня вызвали!

5. Хорошо, проверьте это. Я не получаю это в редакторе, но я исправляю это на панели мониторинга