我想使用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