我正在学习jQuery,我正在尝试找到一个简单的代码示例,它将针对某个条件轮询API.(即每隔几秒请求一个网页并处理结果)
我熟悉如何在jQuery中使用AJAX,我似乎无法找到让它在"计时器"上执行的"正确"方式.
在这背后(不是我承认......)有趣的问题是关于我使用的解决方法的真正问题,而没有真正理解它是如何工作的.
首先简要介绍一下我的用例,这一切都发生在侧边栏中显示的文档绑定UiApp中:
我必须在用GAS编写的邮件合并应用程序中通过电子邮件创建和发送几百个文档.当然,在没有达到5分钟执行时间限制的情况下,在一个批处理中花费太长时间,所以我尝试了一些不同的解决方法来完成任务:
它工作得很好,我处理40个文件批次是每次调用(大约3分钟)然后暂停一段时间并重新开始直到它完成.每个调用都由checkBox链接服务器处理程序触发,复选框本身在处理程序函数中更改,以这种方式创建自己的触发器.
我的问题(最后;-)是:知道整个过程可能需要30到60分钟,这可能有多精确? 这些服务器处理函数如何/为什么被视为多个进程,因为它们是从函数本身内部创建的?
我希望我足够清楚,(我怀疑,因为它在我的脑海里有点混乱:-)
我加入了时钟测试应用程序的代码,它给了我这个想法,它可能会让事情更容易理解.
function doGet() {
var app = UiApp.createApplication().setTitle('Counter/Timer');
var Panel = app.createAbsolutePanel().setStyleAttribute('padding','35');
var counter = app.createHTML().setId('counter').setHTML('<B>Timer = wait</B>').setStyleAttribute('fontSize','40px');// set start display
var clo = app.createTextBox().setName('clo').setId('clo').setValue('0').setVisible(false);//set start value in seconds
var handler1 = app.createServerHandler('doSomething').addCallbackElement(Panel);
var chk1 = app.createCheckBox('test1').addValueChangeHandler(handler1).setVisible(true).setId('chk1').setVisible(false);
app.add(Panel.add(chk1).add(counter).add(clo));
chk1.setValue(true,true);// start the process
return app}
function doSomething(e) {
var app = UiApp.getActiveApplication();
var xx = Number(e.parameter.clo);
var disp = app.getElementById('counter')
xx++ ;// replace by xx-- to count downwards
if(xx>600){ // …Run Code Online (Sandbox Code Playgroud) 对于'这是一个句子'的字符串输入,当位置为6或7时,它必须返回'is'.当position为0时,1,2,3或4结果必须为'this'.
什么是最简单的方法?
Google Apps 有一些简单的触发器:https ://developers.google.com/apps-script/guides/triggers/
其中之一是 onEdit。如文档所述,onEdit 会针对 Google Spreadsheets 触发,但不会针对 Google Docs 触发。
是否有一种干净的方法来检测用户何时更改了文档,并在发生这种情况时运行脚本?
我有一张Google Sheet,我将其用作客户数据库.我需要为每个条目存储相当多的变量(列),所以我认为如果我可以让侧边栏显示活动行的所有值,则查看每个条目会更容易.
示例:如果单击单元格C1,它将显示侧栏中C1,C2,C3和C4的值.
这可能吗?我已经得到了侧边栏显示但我无法弄清楚如何从单元格中获取值并将其打印到补充工具栏.
提前谢谢你,我的(非常)有限的智力已经走到了尽头!
使用:
Google表格(新)
目标:
在电子表格中,显示从HTML创建的模式对话框,然后运行一个函数,然后自动关闭该HTML提示.对话框一直保持到函数完成执行,然后自动消失.这个过程必须每3个小时重复一次,脚本需要像我一样运行(因为我有其他用户没有的编辑权限),所以简单的触发器可能不起作用(我读过你必须创建一个可安装的触发器)如果你希望函数像你一样运行而不是当前用户在给定时间运行的那个人)
是)我有的:
我的代码
这是我的第一个剧本,所以请不要太反感!
Magic_Telling
从HTML文件创建模态对话框
function Magic_Telling() {
var UI = SpreadsheetApp.getUi();
var newline = '\n'
// Display a modal dialog box with custom HtmlService content.
var htmlOutput = HtmlService.createHtmlOutputFromFile('PromptStyling')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setWidth(300)
.setHeight(100);
UI.showModalDialog(htmlOutput, ' ');
}
Run Code Online (Sandbox Code Playgroud)
Prompt_Styling
用于样式提示的HTML文件+运行将处理行的函数All_In的脚本
<html>
<head>
// some irrelevant stuff here
</head>
<script>
window.onload = function() {
google.script.run
.withSuccessHandler(closeDialog)
.All_In();
};
window.closeDialog = function() {
google.script.host.close();
};
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
All_In
函数用于处理行
function All_In() {
UnlockRowBlocks();
UnhideRowBlocks();
LockRowBlocks();
HideRowBlocks();
} …Run Code Online (Sandbox Code Playgroud) 我正在将我的剧本转换成一个补充.其中一个需求是配置模板,因此我编写了一个侧栏,用于启动字段选择器.由于侧边栏没有足够的空间容纳选择器,我必须通过在侧边栏中创建的模式对话框启动它,方法是在服务器端调用此代码:
var html = HtmlService.createHtmlOutputFromFile('TemplatePicker.html')
.setWidth(600).setHeight(425);
SpreadsheetApp.getUi().showModalDialog(html, 'Select the file with the template');
Run Code Online (Sandbox Code Playgroud)
我的问题是,一旦用户选择文件,当我拥有所选文件的ID时,我无法将该ID传递给侧边栏.我试图调用someJSFunctionOfSidebar(id)和parent.someJSFunctionOfSidebar(id),但它没有工作,所以我终于结束了值传递到服务器端,并从那里重新加载侧边栏,但它很慢,产生的效果是丑陋的.
我的问题是:
有没有办法将客户端级别的值从创建的模式对话框传递SpreadsheetApp.getUi().showModalDialog给其父级?也许这不是它的父母,这也是它不起作用的原因.
google-docs google-sheets google-apps-script google-apps-script-addon google-apps-script-web-application
我正在从 Google 网站构建一个社区驱动的网站(我知道这是一个糟糕的选择,我在这件事上别无选择)并且大部分功能都内置在 Google Apps 脚本中(读取/写入外部数据库并处理数据的显示方式)。在各种问题中,我发现了一个一直让我感到困惑的问题。
我通常将我的 GAS 项目组织成 Javascript、HTML 和 CSS(Code.gs、HTML.html 和 CSS.html)。我利用 jQuery 来处理很多事情(例如,单击处理程序、表单提交等)。然而,似乎我的 jQuery 和我的 Javascript 不能存在于同一个“世界”中,这里的意思是在同一个 .gs 文件中,或者如果它在 HTML 文件中存在相同的脚本标签。事实上,我无法从我的 .gs 文件中调用任何 jQuery 函数!有人能解释一下这是为什么吗?问题似乎是不包含 jQuery 库,但我找不到在 Javascript 中包含任何内容的方法(想想 C 中的 #include)。由于这是网络编程,与“普通”编程非常不同,我认为我理解这一点的部分问题来自这里。
非常感谢,谢谢。
google-docs ×2
google-apps-script-web-application ×1
javascript ×1
jquery ×1
polling ×1
string ×1