我有一个脚本,它从电子表格中读取信息,并以 HTML 格式显示。我尝试调整一个按钮,以在电子表格中进行更改时激活信息更新。我只设法执行window.location.reload(true);
. 但是数据没有更新。
这些是代码:
function doGet() {
return HtmlService
.createTemplateFromFile('Index')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function getData() {
return SpreadsheetApp
.openById('IDdelaspreadsheet')
.getActiveSheet()
.getDataRange()
.getValues();
}
function onSubmit(e){
doGet();
getData();
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<? var data = getData(); ?>
<table>
<? for (var i = 0; i < data.length; i++) { ?>
<tr>
<? for (var j = 0; j < data[i].length; j++) { ?>
<td><?= data[i][j] ?></td>
<? } ?>
</tr>
<? } ?>
</table>
// no es del código original. Aquí trato de incluir el botón
<form>
<input onclick="MostrarResultados()" type="button" value="Mostrar" />
</form>
<script type="text/javascript">
function MostrarResultados() {
google.script.run.onSubmit();
window.location.reload(true);
}
</script>
// hasta aquí la parte que inserto, no es del código original
</body>
</html>
代码有几个问题。
google.script.run.onSubmit();
在客户端,它调用服务器端函数,但没有等待服务器响应的“回调”函数。onSubmit(e)
在服务器端调用doGet(e)
,但这是一个保留通过应用程序的 URL 调用的函数。window.location.reload(true);
作为Erick Koleda 2013 年关于使用此代码的问题的回应,HTMLService 限制了对 window 对象的访问。我不完全确定它在使用时会产生怎样的影响HtmlService.SandboxMode.IFRAME
。为了达到同样的效果,我使用了我在下一点中描述的另一种方法。网络应用示例
window.onload
加载 Web 应用程序时,通过调用该函数来加载数据,该函数actualizarTabla()
又调用google.script.run
usingwithSuccessHandler
,这样一旦服务器以 HTML 表格格式响应电子表格数据,该数据就会传递给我们想要的页面元素向他们展示。为了更新数据,按钮调用相同的函数。代码.gs
索引.html
参考: