我正在尝试设置一个小型Web应用程序项目,使Html表单能够与App脚本进行通信。我最初尝试使用doGet()和doPost():在提交HTML中的表单时自动启动doPost(),但是,最后一行,据说重定向到另一个HTML页面:Thanks.html,永远不会被命中。我问了另一个问题,有些人试图让我走向正确的方向。我尝试了另一种解决方案,剥离了所有功能,并且只是尝试使用:
google.script.run.withSuccessHandler(successHandle).returnOK();
然而,App脚本中的returnOK()函数永远不会被命中。单击该按钮时,HTML表单将消失,并且永远不会记录日志(returnOK()脚本中的第一个内容),这意味着永远不会访问该脚本。我的代码中的代码段,下面是最重要的部分。
Code.gs
function doGet() {
var template = HtmlService.createTemplateFromFile('index');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.NATIVE):
}
function returnOK(){
Logger.log("ok");
return "ok";
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).setSandboxMode(HtmlService.SandboxMode.IFRAME).getContent();
}
的index.html
<?!= include('Stylesheet'); ?>
<div id="mainDiv">
<form id="form">
<img src="..." />
<table>...</table>
<label>...</label> <br/>
<div>...</div>
<input type="button" value="Submit" onclick="submit()">
</form>
</div>
<?!= include('Javascript'); ?>
Javascript.html
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script>
function submit(){
google.script.run.withSuccessHandler(successHandle).returnOK();
}
function successHandle(e){
var div = document.getElementById('output');
div.innerHTML = 'Thank you';
}
</script>
答案 0 :(得分:0)
使用形式为参数的函数。
下面的一个(甚至更简化的)示例(仅html部分,gs未更改):
<div id="mainDiv">
<form id="form">
<div id="output">response here</div>
<input type="button" value="Submit" onclick="update(this)">
</form>
</div>
<script>
function update(){
google.script.run.withSuccessHandler(successHandle).returnOK();
}
function successHandle(e){
var div = document.getElementById('output');
div.innerHTML = 'Thank you, answer = '+e;
}
</script>