我想使用dopast()与HtmlService作为异步调度程序调用其他功能。异步功能对于性能非常重要 - 无需等待电子表格操作完成,因此这就是HtmlService的用途。 这里是我的代码明智:HtmlService不工作从doPost() - 脚本异步替代想要
function doGet(e) {
var app = UiApp.createApplication();
var button = app.createButton('Click Me');
app.add(button);
var handler = app.createServerHandler('myClickHandler');
button.addClickHandler(handler);
return app;
}
function myClickHandler(){
sendHttpPostSelf();
}
function doSomething() {
Logger.log('I was called Now!');
return;
}
function sendHttpPostSelf() {
var payload = {
"name" : "name",
"comment" : "comment",
"screenshot" : "screenshot"
};
var options = {
"method" : "post",
"payload" : payload
};
var url="https://script.google.com/macros/s/AKfycbzlVoiDQMbLe4yliErDoNub6A0m3tijSfPAUMEBENgIikQnLQ_H/exec";
var resp=UrlFetchApp.fetch(url,options);
Logger.log(resp.getContentText());//.getContent());
}
function doPost(e){
var dbg;
var dbg=true;
if (dbg==true)for (var i in e.parameter)Logger.log("FormSubmit:doPost "+ i + ": " + e.parameter[i]);
return HtmlService.createHtmlOutputFromFile("myFile.html");
}
//ANd HERE IS myFile.html
<script>
function onFailure(error) {
//alert('Error will Robinson!: '+error.message);
Logger.log('Error will Robinson!: '+error.message);
}
function onSuccess(error) {
//alert('Gotter Done');
Logger.log("FormSubmit:doPost",'Gotter Done');
}
google.script.run.withSuccessHandler(onSuccess).withFailureHandler(onFailure).doSomething();
</script>
的httpPostSelf()工作好和doPost()接收PARMS不错,但我的问题是, HtmlService.createHtmlOutputFromFile(“myFile.html”)不叫doSomething()正确吗? 我只看到了很多神秘的卡哈解析的Logger.log
--END原QUESTION--
问题加成
亲爱的科里:
感谢您的反馈意见的doPost()不处理HtmlService和你提出的异步例子。 你是正确的,按钮点击事件是异步..但我的问题仍然没有答案。为了澄清, 允许我请进一步详细阐述我的问题。我需要工作的是一个异步脚本调用Web应用程序(听起来像AJAX我猜)。所有的作品在我的示例脚本中除了异步。另一种URL被使用,那么在我前面的例子中调用单独的Web应用程序,而不是一个自我后:
var url="https://script.google.com/a/macros/commet.com/s/AKfycbwJ4WM3U5POEWF9XqFzjaV_9TiNLspKb7kePAih59vsWllA0og/exec";
异步是性能的关键,因为我的电子表格代码2000加线进行基础表操作:插入,删除,更新,移动,排序..我有很好的方法打包到对象的脚本。工作表操作脚本当前与站点中的UiApp脚本一起打包并可同步调用。经过许多痛苦的重写之后,一些更复杂的操作(排序和移动)仍需要7秒才能完成。
我想将sheet op脚本迁移到电子表格Web应用程序。 sheet op/Web App应该可以从我的Site UiApp进行异步调用。例如,当我的站点要求进行排序时,它将简单地向Web应用程序释放一个带有parms的sendHttpPost,然后该站点将继续完成其GUI业务(执行客户端排序),而无需等待7秒钟完成它的排序。 WaLaa!
带有parms正确传递的web应用程序在我的示例脚本中工作,但UrlFetchApp.fetch不幸(对我来说)是同步的。这就是我尝试使用异步HtmlService-google.script.run的原因。我试着用HtmlService作为一个web应用程序调用doGet(),并且使用UrlFetchApp.fetch不起作用。 HtmlService作为一个Web应用程序的唯一方式是通过一个带有表单提交的按钮进行调用...我需要一个可编写脚本的界面。
UrlFetchApp.fetch的任何脚本化替代方案 - HtmlService?
评论HtmlService Web应用程序访问
这里是我的测试结果时HtmlService从web应用程序的工作原理:
的doPost()
- 当与FormPanel中
提交按钮提交作品 - 提交时不工作与UrlFetchApp.fetch(需要脚本访问)
评论:任何获得doPost()与UrlFetchApp.fetch一起工作的方式对于编程表单来说都是非常棒的!
的doGet()
- 从浏览器的网址
工作 - 当UrlFetchApp.fetch(需要脚本访问)
提交如果有任何不准确,请与脚本示例回复不起作用。我需要的是UrlFetchApp.fetch脚本访问。
HtmlService页面可以在没有按钮推送的情况下对任何脚本函数进行脚本化异步调用......只需编写任何你想要的JavaScript并使用google.script.run,它是异步的。你将需要用户有一个浏览器窗口打开脚本 – 2013-03-19 11:45:50
请解释并给出一个脚本界面的例子,如果你有一个工程。可编写脚本的界面意味着此功能: 'function testAsyncHtmlService(){ return HtmlService.createHtmlOutputFromFile(“myFile.html”); }' 将调用来自与调用任何其它功能: _testAsyncHtmlService(); _ 这样可不行......拨打HtmlService已通过的doGet打开应用的唯一途径()。即使doGet()在Web应用程序中也不起作用。 – user1387318 2013-03-20 19:52:52
您只能从doGet返回一个HtmlOutput,但您可以从任何google.script.run函数调用返回一个字符串,因此您可以返回HtmlOutput.getContent()。 – 2013-03-21 02:13:46