我正在尝试编写一个具有客户端和服务器端组件的 Google Apps 脚本。客户端组件显示进度条。客户端调用服务器端函数(异步调用),其进度必须显示在客户端进度条中。现在,我想要的是能够根据服务器端功能的反馈更新客户端进度条。这可能吗?
由于 JS 异步进行服务器端调用这一事实造成了复杂性,因此我无法真正在客户端调用函数和更新进度条的循环。
我当然可以将服务器端函数的执行分成多个步骤,从客户端一个一个地调用,每次更新状态栏。但我想知道是否有更好的解决方案。有没有办法从服务器端调用客户端函数,并根据传递的参数更新进度条?或者有没有办法从服务器端访问客户端进度条对象并修改它?
最佳答案
我处理这个问题的方法是让中间人(现在向 Romain Vialard 大声疾呼这个想法)处理进度:Firebase
HTML/客户端可以连接到您的 Firebase 帐户(它们是免费的!)并“观察”变化。
客户端代码可以在代码执行过程中更新数据库——这些更改会立即通过 Firebase 反馈到 HTML 页面。这样,您就可以更新进度条。
Romain 有一个小例子/描述 here
我使用的代码:
//Connect to firebase
var fb = new Firebase("https://YOUR_DATABASE.firebaseio.com/");
//Grab the 'child' holding the progress info
var ref = fb.child('Progress');
//When the value changes
ref.on("value", function(data) {
if (data.val()) {
var perc = data.val() * 100;
document.getElementById("load").innerHTML = "<div class='determinate' style='width:" + perc + "%\'></div>";
}
});
在客户端,我使用 Firebase library更新进度:
var fb = FirebaseApp.getDatabaseByUrl("https://YOUR_DATABASE..firebaseio.com/");
var data = { "Progress": .25};
fb.updateData("/",data);
关于javascript - 在 Google Apps 脚本中从服务器端通信到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246063/