【发布时间】:2016-07-29 05:02:49
【问题描述】:
2016 年 4 月 7 日星期四中午左右,我失去了我的一个 Google Script WebApp 的所有新实例的功能。
我广泛使用从 JavaScript 调用的 google.visualization.Query(... 来快速搜索大型 Google 表格文件。
在撰写本文时,一个之前加载的 webapp 实例仍在成功运行,但所有新加载的实例都失败了。我已经提取了该工作实例的源代码,它与非工作实例相同。我创建了一个新项目,并且新项目实例(具有相同的代码)在所有浏览器中也都失败了。
我很困惑..
这是我怀疑的一段代码。这是一个递归函数,查询一个电子表格上的两个工作表(构建和构建),然后从另一个电子表格(存档)查询另一个工作表,并将结果设置为 3 个数据表。
function queryThings(response)
{
// If this is the first call to query
if(response == null)
{
sessionStorage.setItem("qIndex_H", "0");
// Building Query
var query = new google.visualization.Query(s_thingsBuilding + '&tq=select+*+where+LOWER(' + key1 + ')+contains+%27' + sessionStorage.getItem("stringInput") + '%27');
query.send(querythings);
return;
}
// if This is the second call
if(sessionStorage.getItem("qIndex_H") == "0")
{
sessionStorage.setItem("qIndex_H", "1");
//Store build sheet dataTable in sessionStorage
sessionStorage.setItem("thingTable1", response.getDataTable().toJSON());
// Show or hide the div
if(response.getDataTable().getNumberOfRows() > 0)
$("#thingsBuilding").show();
else
$("#thingsBuilding").hide();
var query = new google.visualization.Query(s_thingsBuilt + '&tq=select+*+where+LOWER(' + key1 + ')+contains+%27' + sessionStorage.getItem("stringInput") + '%27');
query.send(querythings);
return;
}
// if This is the third call
if(sessionStorage.getItem("qIndex_H") == "1")
{
sessionStorage.setItem("qIndex_H", "2");
//Store build sheet dataTable in sessionStorage
sessionStorage.setItem("thingTable2", response.getDataTable().toJSON());
// Show or hide the div
if(response.getDataTable().getNumberOfRows() > 0)
$("#thingsBuilt").show();
else
$("#thingsBuilt").hide();
var query = new google.visualization.Query(s_thingsArchive + '&tq=select+*+where+LOWER(' + key1 + ')+contains+%27' + sessionStorage.getItem("stringInput") + '%27');
query.send(querythings);
return;
}
sessionStorage.setItem("qIndex_H", "0");
var dt1 = new google.visualization.DataTable(sessionStorage.getItem("thingTable1"));
var dt2 = new google.visualization.DataTable(sessionStorage.getItem("thingTable2"));
// Show or hide the div
if(response.getDataTable().getNumberOfRows() > 0)
$("#thingsArchive").show();
else
$("#thingsArchive").hide();
if(dt1.getNumberOfRows() + dt2.getNumberOfRows() + response.getDataTable().getNumberOfRows() == 0)
$("#thingsDiv").hide();
setTable_DT(dt1, "thingsBuilding");
setTable_DT(dt2, "thingsBuilt");
setTable_DT(response.getDataTable(), "thingsArchive");
}
控制台输出:
未捕获的错误:缺少对请求 ID 的查询:0VM60 userCodeAppPanel:170
未捕获的类型错误:无法读取 nullqueryThings @ VM60 userCodeAppPanel 的属性“toJSON”:170R.eC @ format+en,default+en,ui+en,corechart+en.I.js:288xw @ format+en,default+en,ui +en,corechart+en.I.js:283(匿名函数) @format+en,default+en,ui+en,corechart+en.I.js:287
VM60 用户代码应用面板:243
...
未捕获的类型错误:无法读取 null 的属性“toJSON”
...
过去,我的 Google Apps 脚本代码崩溃了几个小时,只是为了让功能自行恢复。有谁知道最近对 API 的任何更改可能会影响我的代码?我认为它与浏览器无关,因为它在 IE、Firefox 和 Chrome 上都失败了。先前加载的一个工作实例已加载到 Chrome 上。诚然,我在这个文件中没有太多错误检查代码,但消除过程让我怀疑 Apps Script 或 Visualization API 的更新。
谢谢
最大
【问题讨论】:
-
别以为是 Visualization API,目前正在构建仪表板,4/7 全天运行良好
标签: javascript google-apps-script google-visualization