如何解决ScriptError:很抱歉,发生服务器错误请稍等,然后重试
我不断得到
ScriptError:很抱歉,发生服务器错误。请稍等,然后重试。
每当我尝试运行以下代码时:
macros.gs
WITH T(ID,str) AS
(
SELECT 1,'LORIK_BB_ID_FF_KKK_HUY_222_44' FROM dual UNION ALL
SELECT 2,'LUN_GGG_MAMA_FF_GG_GG_TT22_3' FROM dual
)
SELECT ID,REGEXP_SUBSTR(str,'(.*)(_.*_.*$)',1,NULL,1) mystring
from t;
ID MYSTRING
---------- -----------------------------
1 LORIK_BB_ID_FF_KKK_HUY
2 LUN_GGG_MAMA_FF_GG_GG
2 rows selected.
Form.html
/** @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!";
}
JavaScript.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>
我只想创建侧边栏表单,提交后将向站点发出请求。唯一的问题是,当您单击提交时,将显示ScriptError。我已经查明了错误的出处:点击提交后调用<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>
时,此行handleFormSubmit()
导致错误被抛出。
我尝试注释了google.script.run.withFailureHandler(updateButton).testerr(formObject)
函数中的所有行,并用简单的testerr()
行替换了它们。但是,错误仍然存在。
为什么会这样?我不知道为什么,感谢您的帮助!
解决方法
我不确定这是否可以解决代码中的所有问题,但是...
替换
google.script.run.withFailureHandler(updateButton).testerr(formObject);
google.script.run.withSuccessHandler(updateButton).testerr(formObject);
作者
google.script.run
.withFailureHandler(updateButton)
.withSuccessHandler(updateButton)
.testerr(formObject);
以上是因为原始代码正在对同一服务器函数进行两次调用。这可能由于“竞争条件”而引起一些问题(任何一行都可以在另一行之前完成,并且两者都将调用相同的客户端回调)
也许新的运行时(v8)和使用input file="type"
的组合会引起问题。尝试更改为旧的运行时。
相关
- Moving google apps script to v8 file upload stopped working from sidebar
- google.script.run fails in case of file input
很遗憾,您遇到的问题似乎是一个错误。
在这种情况下,您可以通过单击★旁边的★,在问题跟踪器上为该问题
作为一种解决方法,您可以尝试切换回旧的运行时。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。