HtmlService で doPost() を非同期ディスパッチャーとして使用して、他の関数を呼び出したいと思います。非同期機能はパフォーマンスにとって重要です。スプレッドシート操作が完了するのを同期的に待機する必要がないため、HtmlService はそのためのものです。これが私がコード的に持っているものです:
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() はパラメーターを正常に受け取りますが、私の問題は HtmlService.createHtmlOutputFromFile("myFile.html") が doSomething() を適切に呼び出さないことですか? Logger.logには不可解な caja の解析がたくさん見られるだけです --元の質問の終わり --
質問の追加
親愛なる Corey:
doPost() が HtmlService を処理しないことと、提案された非同期の例についてのフィードバックをお待ちしております。あなたは正しいです、ボタンクリックイベントは非同期です..しかし、私の質問はまだ答えられていません. 明確にするために、私の質問についてさらに詳しく説明させてください。私が作業する必要があるのは、Web アプリへの非同期スクリプト呼び出しです (AJAX のように聞こえます)。サンプル スクリプトでは、非同期を除いてすべて動作します。前の例では、別の URL を使用して、自己投稿の代わりに別の Web アプリを呼び出しています。
var url="https://script.google.com/a/macros/commet.com/s/AKfycbwJ4WM3U5POEWF9XqFzjaV_9TiNLspKb7kePAih59vsWllA0og/exec";
基本的なシート操作 (挿入、削除、更新、移動、並べ替え) を実行するスプレッドシート コードが 2000 行以上あるため、非同期はパフォーマンスにとって重要です。メソッドを使用してスクリプトをオブジェクトに適切にパッケージ化しています。シート ops スクリプトは現在、サイトの UiApp スクリプトにパッケージ化されており、同期的に呼び出すことができます。多くの面倒な書き直しの後、より複雑な操作 (並べ替えと移動) のいくつかは、完了するまでに最大 7 秒かかっています。
シート操作スクリプトをスプレッドシート Web Apps に移行したいと考えています。シート op/Web アプリは、サイト UiApp から非同期で呼び出せる必要があります。たとえば、私のサイトが並べ替えを呼び出すと、sendHttpPost と parms を Web アプリに解放するだけで、サイトはスプレッドシートを 7 秒待たずに GUI ビジネス (クライアント側で並べ替えを実行) を完了し続けます。並べ替えを完了します。ワラー!
parms を渡す Web アプリはサンプル スクリプトで正しく動作しますが、UrlFetchApp.fetch は残念ながら (私にとっては) 同期的です。それが、非同期HtmlService-google.script.runを試みた理由です。Web アプリとして HtmlService で doGet() を呼び出してみましたが、UrlFetchApp.fetch を使用しても機能しません。HtmlService が Web アプリとして機能する唯一の方法は、フォーム送信のプッシュボタンから呼び出された場合です...スクリプト可能なインターフェイスが必要です。
UrlFetchApp.fetch - HtmlService のスクリプト可能な代替手段はありますか?
コメント HtmlService Web アプリへのアクセス HtmlService
がWeb アプリ
から動作する場合のテスト結果は次の
とおり
です
。 doPost() を UrlFetchApp.fetch で動作させる方法は、フォームのプログラミングで知っておくとよいでしょう。
doGet()
- browser-url から動作します
- UrlFetchApp.fetch で送信された場合は動作しません (スクリプト アクセスに必要)
不正確な場合は、スクリプトの例を添えて返信してください。必要なのは UrlFetchApp.fetch スクリプト アクセスです。