如何在客户端运行服务器端的功能?

How do you run a function of the server side while on the client side?

提问人:Script Automator 提问时间:12/22/2020 更新时间:12/22/2020 访问量:452

问:

所以我已经有好几天了。我正在尝试将数据传递到我的服务器端脚本中,但是当我这样做时,我收到此错误消息。错误信息

我试过在 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),但它不会运行。我已经从我所有的帐户中唱出来了,因为我认为这可能是问题所在,但事实并非如此。请帮忙,谢谢!

JavaScript html google-apps-script 服务器端 客户端

评论

0赞 Cooper 12/22/2020
也许您应该在加载 html 后添加事件侦听器,就像在 window.onload 中一样。它可能会起作用
0赞 StackSlave 12/22/2020
在客户端将 XMLHttpRequest 与 FormData 一起使用,以从服务器发送和接收信息。
0赞 Cooper 12/22/2020
@StackSlave我不同意就应该这样做。google.script.run.doUpload(myData);
0赞 Cooper 12/22/2020
哦,我假设你的html在网络应用程序中。是这样吗?
0赞 StackSlave 12/22/2020
如果该方法从服务器发送和接收,则使用 .通用问题得到通用答案。XMLHttpRequest

答:

2赞 Cooper 12/22/2020 #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>

检查您的视图/执行

评论

0赞 Cooper 12/22/2020
是的。在视图/执行中查看它们Dec 21, 2020, 5:12:10 PM Info {first=Laurence} Dec 21, 2020, 5:12:10 PM Info I was called!
0赞 Script Automator 12/22/2020
我没有收到日志。我收到一条消息,说编辑器上没有执行任何函数。(我已经复制粘贴了您的代码)
0赞 Cooper 12/22/2020
在视图/执行中查看它们
0赞 Script Automator 12/22/2020
是的,这就是我正在做的事情。我不知道为什么,但现在我在日志上得到空 [20-12-21 18:11:14:243 CST] 空 [20-12-21 18:11:14:245 CST] 我被叫来了!
0赞 Script Automator 12/22/2020
好的,看看这个。我没有在编辑器上得到它,但我在仪表板上得到了它