1

我正在使用谷歌应用程序脚本和电子表格作为存储开发一个 Web 应用程序。

基本上,一个 HTML 显示不同选项卡的一些表格。

在我的应用程序中,用户可以添加新任务、编辑任务并将任务标记为已完成。由于使用该应用程序的用户很多,因此每个客户端上显示的数据很快就会过时。

我想尽快用新记录和对现有记录的更改来更新应用程序。

我想在单元格中记录最后一个编辑选项卡+行并每分钟从服务器中提取该数据,但是,如果在那一分钟内添加/编辑了许多条目怎么办?

我认为 WebSocket 是不可能的。还有什么想法吗?

我正在使用 JQuery 客户端。

4

3 回答 3

1

除了轮询,别无他法。您不能有来自 HTML 服务的套接字或回调。您可以经常轮询,但这可能会耗尽您的配额。如果您真的想轮询并避免配额,您可以在已发布的公共电子表格上记录最后一次编辑并使用 ajax 从客户端读取它,但已发布的电子表格仅每分钟更新一次。

于 2013-11-06T17:29:34.567 回答
0

为帮助避免冲突,请为每个任务指定一个唯一 ID。诸如创建时间+随机字符串之类的东西。这样您就可以在电子表格中查找它。另外,我认为锁定服务可以暂时阻止并发编辑以避免冲突: https ://developers.google.com/apps-script/reference/lock/

要检查更新,请尝试轮询电子表格的上次编辑时间。如果它大于之前的轮询,则获取更新。 https://developers.google.com/apps-script/reference/drive/file#getLastUpdated()

于 2013-11-08T14:28:30.103 回答
0

你可以尝试这样的事情:

var lock = LockService.getPublicLock();
var success = lock.tryLock(10000);
if (success) {
// check your spreadsheet for lastUpdated or PropertiesService.getScriptProperties();
}
} else {
// do something else (try it again or error msg)
}
lock.releaseLock(); 

我发现它在我的应用程序上运行良好,我有大约 1000 个用户。

于 2014-03-19T02:47:02.553 回答