【发布时间】:2018-09-29 22:53:15
【问题描述】:
<script>
window.onload = function() {
google.script.run.withSuccessHandler(Loadthis)
.getDataBySheetName('Bulk','all');
}
function Loadthis(data) {
document.getElementById("output").innerHTML = "Loading...wait";
var select = document.getElementById('trythis');
var html = "";
select.innerHTML = html;
for ( var i in data) {
html += "<tr>";
for (var j=0;j<data[i].length;j++) {
html += "<td>"+data[i][j]+"</td>";
}
html += "</tr>";
select.innerHTML = html;
}
document.getElementById("output").innerHTML = "";
}
我正在使用谷歌脚本。部署为网络。所有这些都是可能的挖掘这个网站。但我无法通过搜索解决我的这个问题。
我在 google 脚本中发现 onclick 按钮并不总是按预期工作。无论如何,在另一个 html 中,我可以解决它。制作一个表单并将按钮放在 之后,然后每次调用它时,它都能完美运行。但是这个没有。是因为我已经调用了onload吗?在用户(我)单击按钮之前,我应该让页面为空吗?但我想在启动时显示默认报告。
问题是当我在 window.onload 中使用函数时,google.script.run.... 会转到 withSuccessHandler 来完成。但是,当我单独声明该函数并让它在单击按钮时发生时,google.script.run... 会进入 withFailureHandler。
document.getElementById("List").onclick = function() {
var sheetname = 'cNow';
alert('Am I called '+sheetname);
getit(sheetname);
}
在这里,出现警报。所以它一定是被调用了。
然后
function getit(sheetname){
var div = document.getElementById('output');
div.innerHTML = 'Am I called '+sheetname;
google.script.run
.withSuccessHandler(Loadthis)
.withFailureHandler(onFailure)
.getDataBySheetName(sheetname,'all');
}
然后,在此之后,我可以看到服务器端 Logger.log 处理成功,就像在 onload 中调用它一样。
但接下来发生的是 onFailure 被调用。 因此,我没有调用相同的 Loadthis 函数,而是在这里制作了不同的副本 Loadthis , onSuccess 并调用了
function getit(sheetname){
var div = document.getElementById('output');
div.innerHTML = 'Am I called '+sheetname;
google.script.run
.withSuccessHandler(onSucess)
.withFailureHandler(onFailure)
.getDataBySheetName(sheetname,'all');
}
function onSuccess(data2) {
var div = document.getElementById('output');
div.innerHTML = "Loading...wait";
var select = document.getElementById('trythis2');
var html = "";
select.innerHTML = html;
for ( var i in data2) {
html += "<tr>";
for (var j=0;j<data2[i].length;j++) {
html += "<td>"+data2[i][j]+"</td>";
}
html += "</tr>";
select.innerHTML = html;
}
document.getElementById("output")
.innerHTML = "Now list loaded...";
}
function onFailure(status) {
var div = document.getElementById('output');
div.innerHTML = 'failed';
}
仍然调用 onFailure。至于正在进行的过程,“div - 输出”首先显示“我现在打电话了吗”然后“失败”。同样,服务端 Logger.log 显示成功。
我无法猜测,但如果这是事实,我将不得不创建另一个 html 并编写相同的函数,但只需更改要调用的 googlesheet。这是浪费时间、精力和资源。
** 我已将这些脚本放在正文底部,以防元素尚未加载。并让 windows.onload 调用 onSuccess 并按预期工作。
除了分别制作每个 html 之外,您能否建议解决方法?
我最后的办法是单独创建这个 javascript 文件并使用它来包含。然后在单击按钮时使用 iframe 在其中调用不同的页面........我想最终构建一页解决方案..虽然。
近期发展: 1.分离了html,但cNow还是不行。 2.发现sheet的结构和Bulk的结构一样,但是数据值有问题。当我将批量数据复制到未显示的数据中时,它显示了。无需单独的 html,但问题出在数据中。
它已解决,因为问题位于“时间戳”列中。我正在为旧数据创建删除行。然后再次不比较此工作表的时间戳。因此我记得我之前操作过这个专栏。
现在我要学习如何在工作表中进行数据验证和注意事项。
如果从google sheet中检索到数据,并且var data在某一列中的值在某些行中有不同的格式,虽然数据和所有函数调用成功,但返回失败。只是要注意,以便像我这样的新脚本编写者可以从中受益。
【问题讨论】:
-
“工作”示例中的
sheetname与不工作的示例不同。 -
感谢您的快速浏览。是的。因为我想通过单击按钮来调用不同的列表。加载时,将显示report1,并应显示onclick report2。它一直工作到服务器端。一切都被调用并返回准备传递的数据。 Logger.log 是这么说的……
-
来自作者本人的评论,问题已解决。如何将其标记为已修复?
-
如果您自己解决了问题,然后在下面添加您自己的答案,您甚至可以将自己的答案标记为已接受 - 请参阅 stackoverflow.com/help/self-answer 。您可能需要先获得少量的声望。或者,如果修复是微不足道的并且可能对其他人不感兴趣,那么您可以完全删除该问题。
-
@ADyson 干杯。我可以添加答案。起初我根本没有看到按钮。
标签: javascript