doPost在Google应用程序脚本中不工作

doPost在Google应用程序脚本中不工作,post,google-apps-script,Post,Google Apps Script,我遇到了各种各样的问题,但没有一个能解决我的问题。我在google应用程序脚本中编写了一个简单的doPost()代码: function doPost(e){ Logger.log("Hello World"); } 然后我将其部署为一个web应用程序,并将url粘贴到hurl.it上以发出post请求。但是,日志中没有记录任何内容,响应为200(正常)。我认为它不在这个doPost()函数中。有人能告诉我我做错了什么吗?您的实现没有满足web应用程序所需的所有要求。以下是文档()的摘录:

我遇到了各种各样的问题,但没有一个能解决我的问题。我在google应用程序脚本中编写了一个简单的
doPost()
代码:

function doPost(e){
  Logger.log("Hello World");
}

然后我将其部署为一个web应用程序,并将url粘贴到hurl.it上以发出post请求。但是,日志中没有记录任何内容,响应为200(正常)。我认为它不在这个
doPost()
函数中。有人能告诉我我做错了什么吗?

您的实现没有满足web应用程序所需的所有要求。以下是文档()的摘录:

网络应用的要求

如果脚本满足以下要求,则可以将其发布为web应用程序:

  • 它包含一个
    doGet(e)
    doPost(e)
    功能
  • 函数返回一个HTML服务
    HtmlOutput
    对象或一个内容服务
    TextOutput
    对象
以下是一些例子:

function doGet(e) {
  var params = JSON.stringify(e);
  return HtmlService.createHtmlOutput(params);
}

function doPost(e) {
  return ContentService.createTextOutput(JSON.stringify(e.parameter));
}
为了完整起见,您还必须在每次更改代码时将web应用重新部署为新版本。在现有版本下重新部署不起作用,您必须创建新版本才能使更改生效

使用标准的
Logger.log
跟踪
doGet(e)
doPost(e)
中的更改对于web应用程序来说也是不可靠的,因为它们是异步执行的。我建议您将输出记录到电子表格中。有一个很棒的脚本库,名为BetterLog,它扩展了Logger API来实现这一点;可在以下链接中找到:


更新2018-07-18

应用程序脚本现在支持StackDriver日志记录,可从应用程序脚本编辑器的“查看”菜单访问。

为了使发布的Web应用程序URL的“exec”版本在任何新更改下运行,您必须在每次更改脚本时发布新版本。变化有多小并不重要。而不是使用
Logger.log(“Hello World”)我会将一个值写入电子表格

SpreadsheetApp.openById(id).getSheetByName(name).appendRow(['test']);

您的Web应用有两个不同的URL。一个结尾是“dev”,另一个结尾是“exec”。“dev”版本始终是当前代码。除非发布新版本,否则“exec”版本永远不会更改。

我为此挣扎了一段时间,终于幸运了。 我经常使用w3schools,所以我充分阅读了form元素及其属性。 ACTION属性似乎是让doPost(e)为me和GAS工作的关键

  • 这是我的HTML(删除了左括号和右括号)

  • 原因之一可能是您使用的是Postman之类的Rest客户端。这不管用,尽管我不知道原因

    尝试使用这样的标准形式,它将起作用:

    <!DOCTYPE html>
    <html>
    <body>
    
    <form action="https://script.google.com/macros/s/AKfyc.../exec">
      First name:<br>
      <input type="text" name="param1" value="ABC">
      <br>
      Last name:<br>
      <input type="text" name="param2" value="XYZ">
      <br><br>
      <input type="submit" value="Submit">
    </form> 
    
    </body>
    </html>
    
    
    名字:

    姓氏:


    function doPost(e){
      Logger.log("I WAS RAN!!")
      if(typeof e !== 'undefined') {
        return ContentService.createTextOutput(JSON.stringify(e.parameter));
      }
    }
    
    <!DOCTYPE html>
    <html>
    <body>
    
    <form action="https://script.google.com/macros/s/AKfyc.../exec">
      First name:<br>
      <input type="text" name="param1" value="ABC">
      <br>
      Last name:<br>
      <input type="text" name="param2" value="XYZ">
      <br><br>
      <input type="submit" value="Submit">
    </form> 
    
    </body>
    </html>