ScriptError: We're sorry, a server error occured. Please wait a bit and try again

ScriptError: We're sorry, a server error occured. Please wait a bit and try again

我不断得到

ScriptError: We're sorry, a server error occured. Please wait a bit and try again.

每当我尝试 运行 以下代码时:

macros.gs

/**   @OnlyCurrentDoc   */
// When the Sheet is opened, add the menu and create an item in the menu *** WORKING
function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Menu')
      .addItem('Send Confirmation Email', 'createSideBar')
      .addToUi();
}


// Creates the side bar from the Index.html file and displays it *** WORKING
function createSideBar() {
  var form = HtmlService.createTemplateFromFile('Index').evaluate().setTitle('Send Confirmation Email');
  SpreadsheetApp.getUi().showSidebar(form);
}


// Test function where I make a request to my site *** NOT WORKING
function testerr(formObject) {
  UrlFetchApp.fetch('https://webhook.site/...');
  return "Complete!";
}

Form.html

<form id="sendEmailForm" onsubmit="handleFormSubmit(this)">

    <div class="form-group">
        <label for="row_number">Row</label>
        <input class="form-control form-control-sm" type="number" id="row_number" name="row_number" required>
    </div>

    <div class="custom-file">
        <input type="file" class="custom-file-input" id="images_input" name="images_input" multiple required>
        <label class="custom-file-label" for="images_input">Select images...</label>
    </div> 

    <button id="submit-btn" type="submit" class="btn btn-primary btn-md btn-block">Submit</button>

</form>

JavaScript.html

<script>
    // Prevent forms from submitting. *** WORKING
    function preventFormSubmit() {
        console.log('Entered preventFormSubmit()...');
        
        var forms = document.querySelectorAll('form');
        for (var i = 0; i < forms.length; i++) {
            forms[i].addEventListener('submit', function (event) {
                event.preventDefault();
            });
        }
        
        console.log('Exited preventFormSubmit()...');
    }
    window.addEventListener('load', preventFormSubmit); // *** WORKING

    // *** NOT WORKING
    function handleFormSubmit(formObject) {
        console.log('Entered handleFormSubmit()...');
        
        google.script.run.withFailureHandler(updateButton).testerr(formObject);
        google.script.run.withSuccessHandler(updateButton).testerr(formObject);
        
        console.log('Exited handleFormSubmit()...');
    }

    // *** WORKING
    function updateButton(str) {
        document.getElementById('submit-btn').innerHTML = str;
    }
</script>

我只想创建侧边栏表单,提交后会向网站发出请求。唯一的问题是当您单击提交时,将显示 ScriptError。我已经确定了错误发生的位置:当 handleFormSubmit() 在点击提交后被调用时,这一行 google.script.run.withFailureHandler(updateButton).testerr(formObject) 导致错误被抛出。

我尝试注释掉 testerr() 函数中的所有行,并用简单的 return "Complete!"; 行替换它们。尽管如此,错误仍然存​​在。

为什么会这样?我不明白为什么,感谢任何帮助!

我不确定这是否会解决您代码的“所有”问题,但是...

替换

google.script.run.withFailureHandler(updateButton).testerr(formObject);
google.script.run.withSuccessHandler(updateButton).testerr(formObject);

来自

google.script.run
.withFailureHandler(updateButton)
.withSuccessHandler(updateButton)
.testerr(formObject);

以上是因为原始代码对同一个服务器函数进行了两次调用。由于“竞争条件”,这可能会引入一些问题(任何一行都可能先于另一行完成,并且都将调用相同的 client-side 回调)


也许新运行时 (v8) 的组合和 input file="type" 的使用导致了问题。尝试更改为旧运行时。

相关

  • google.script.run fails in case of file input

很遗憾,您遇到的问题似乎是一个错误。

在这种情况下你可以做的是 star Issue Tracker here 上的问题,方法是点击 在问题编号旁边,post 评论并说明您受到该问题的影响。

作为解决方法,您可以尝试切换回旧运行时。