【问题标题】:google.script.run.withSuccessHandler() creating problemsgoogle.script.run.withSuccessHandler() 创建问题
【发布时间】:2013-05-03 17:53:03
【问题描述】:

我正在使用 HtmlService 向我的脚本提交一个简单的表单以进行处理。我正在使用 jQuery 来执行输入验证等操作。我为我的提交按钮创建了一个表单和一个formSubmit() 函数:

<input type='button' onclick='formSubmit()' value='Submit' />

对于我的 JS:

function formSubmit(){
   //verify inputs
   //if inputs are good
   google.script.run.withSuccessHandler(success).withFailureHandler(fail).submit(document.forms[0]);
}

我已将问题隔离到withSuccessHandler(),并且它只是在几天前才开始发生。当它出现时,它会一遍又一遍地调用我的脚本。有时每隔 1 分钟,有时每隔 2-3 分钟。停止执行的唯一方法是关闭浏览器窗口。这是success() 函数:

function success(e){
  $('#dialog-body').html(e.body);
  $('#loading').fadeOut(100, function (){
    $('#btnSubmit').fadeIn(100);
    $('#dialog').dialog( "open");
    $('#txtEmail').val("");
    document.getElementById('txtEmail').disabled=true;
    document.getElementById('chkEmail').checked=false;
    document.getElementById('chkShare').checked=false;
  });
}

*更新:在测试了一段时间后,我什至无法确定它是否只是.withSuccessHandler() - 似乎任何时候我都在使用 google.script.run 服务。问题是间歇性的。我尝试了其他运行脚本的方法,它们都运行良好。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    我看不到这个问题。我编写了一个完美运行的小应用程序。也许在您的客户端代码的其他地方有一个setTimeout 或其他一些正在启动的循环?

    Code.gs(“服务器端”)

    function submit(e) {return 'Recieved ' + e.simpleTextField;}
    
    function doGet(){return HtmlService.createHtmlOutputFromFile('ui');}
    

    ui.html(“客户端”)

    <html>
    <script>
    function formSubmit(){
       google.script.run.withSuccessHandler(success).withFailureHandler(fail).submit(document.forms[0]);
    }
    function success(e){alert(e);}
    function fail(e){console.log(e);}
    </script>
    <body><form>
    <input type='text' name='simpleTextField' />
    <input type='button' onclick='formSubmit()' value='Submit' />
    </form></body>
    </html>
    

    这很好用,我只看到一个弹出窗口显示。如果success 被多次调用,那么我会看到多个我看不到的弹出窗口。

    这是应用程序in action,这是source code(仅供查看)。

    【讨论】:

    • 运行更简单的脚本进程时,我得到了积极的结果。该脚本接受一个 GmailLabel,并处理它做各种事情。如果标签相对较小,它可以按需要工作。如果它有 300 多条消息 - 那么我会看到错误(间歇性地,经常性地)。您可以查看源代码here 和运行中的脚本here
    • 另外,我使用 UiApp 构建了一个界面,它的行为方式相同。直到几周前,该脚本仍按预期工作。当我恢复它们时,以前的工作版本现在也表现得像这样。我可以通过创建一个调用 clickHandler 函数并手动传递参数的函数从编辑器中成功运行脚本。
    • Greg - 大致来说,您的操作需要多长时间重试?您能否查看 Chrome 开发工具以查看是否正在进行新的 HTTP 调用?在这里查看信息 - developers.google.com/chrome-developer-tools/docs/network
    • 在尝试了几个场景后,网络分析器或控制台中没有任何内容表明它正在拨打新电话。根据脚本在我的云端硬盘中的输出,它似乎大约每 1.5 到 2 分钟一次。
    • Greg,如果在 HtmlService 中有一个新的调用,则网络分析器中必须有一些东西,因为它是通过 HTTP 构建的。当我添加 3-4 分钟的延迟并重新运行一次时,我终于能够看到一些东西。这与 UiApp 重试问题不同,因为它们非常不同。
    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2023-03-12
    • 2013-03-27
    • 2021-01-06
    相关资源
    最近更新 更多