質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • HTML

    8946questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

GASのHTMLとのデータ連携と値の確認方法について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 627

ladybug

score 1

前提・実現したいこと

極めて初心者になります。お手柔らかに教えて頂ければ幸いです。
エラーが発生しているわけではございません。
理由が知りたいです。

HTML(クライアント)側からGASを呼び出します。
その返り値を受け取りHTML側で保持したいのですが上手く行きません。
受け取れてはいるようです。
変数に格納しalertで確認しているのですがalertの場所によって表示されたりされなかったりします。

この理由を教えてください。

本当に初歩的な質問で大変恐れ入りますが、どうぞ宜しくお願い致します。

発生している問題・エラーメッセージ

alertを使用して変数を確認できる場所と出来ない場所がある。

該当のソースコード

<!DOCTYPE html>
<html>
<head>
  <!--GASではAPP生成過程のパース処理によりタイトルは置き換わる-->
  <title>売買管理入力フォーム</title><!--実際には表示されないタイトル-->
</head>

  <script>
    //顧客情報取得モジュールを稼働
    google.script.run.withSuccessHandler(eventEnd).getclient()

    // getclient() が正常終了した際の処理
    function eventEnd(serverResult){
    var client_name = serverResult;

    alert(client_name);//ここのアラートは中身共に問題なし

    }

    alert(client_name);//ここ、もしくは以降の場所ではアラートは機能せず内容も確認不可

  </script>

試したこと

同HTML上にある他の変数はどの場所でもalertで出力されることは確認済み。
このgoogle.script.runの正常終了時の返り値を変数に格納した値のみ場所によって機能したりしなかったりする。

補足情報(言語/FW/ツール等のバージョンなど)

極シンプルなGASとhtmlとのデータ授受です
ブラウザはgoogle chrome

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

多分、下記のようなことだと思います。

    var client_name = 'みていぎ'; // ここで宣言

    //顧客情報取得モジュールを稼働
    google.script.run.withSuccessHandler(eventEnd).getclient(); // ← 「;」が無いと場所によっては意図しない挙動になる

    // getclient() が正常終了した際の処理
    function eventEnd(serverResult){
    //    var client_name = serverResult; // ← 「var」を付けることでスコープが関数「eventEnd」の中のみになるから他から見えない
        client_name = serverResult;
        alert( client_name );
    }

    alert( client_name ); // 「みていぎ」と表示される

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/05 19:14

    早々のご回答本当に嬉しく存じます。
    セミコロンで挙動は変わりませんでした。しかし今後の為に注意したいと思います。ありがとうございます。
    「var」についても外しても変化はありませんでした。
    eventEnd関数内のalertは機能し、それ以外では機能しません。

    ちなみにclient_nameには複数の文字列(会社名)が入る配列になるのですが、それが関係しているのでしょうか。
    しかし、場所によってはちゃんとその内容が表示されるのでなんとも言えないのですが。。。

    キャンセル

  • 2017/03/05 19:24

    「ここで宣言」の部分は足していますか?

    キャンセル

  • 2017/03/05 19:41

    「ここで宣言」の内容通りに事前に宣言しますと、「みていぎ」とアラートが出ます。
    client_nameが戻り値で上書きされていないようです。
    今ふと気付いたのですが、GASで「公開」から「最新のコードでテストします」で稼働確認しているのですが、「みていぎ」はHTML表示前にアラートが出るのに対し、戻り値の確認できるeventEnd関数内でのアラートはHTMLが表示された後に表示されている様です。
    なぜかこのgetclient関数呼び出しや正常終了時のeventEndの順番が最後になってる気がします。
    関係あるのでしょうか。。
    最終目的は.gsからの戻り値をHTML内で保持し使いたいです。
    拙い説明でお手を煩わせて大変恐縮ですが、どうぞ宜しくお願い致します。

    キャンセル

  • 2017/03/05 19:49

    それが普通の挙動です。
    google.script.run.withSuccessHandler(eventEnd)でeventEnd関数を渡しているので、そこで得たデータを使うのはSuccessHandlerが実行されるタイミングになります。

    そのタイミングは確実に
    alert( client_name ); // 「みていぎ」と表示される
    より後です。

    eventEnd関数で入れたclient_nameを使うのであれば、関数内から呼ぶかeventEnd関数より後のイベントです。
    例えば、「ここで宣言」を残した状態で、クリックイベントなどを設定し、その関数内でclient_nameを使う際はeventEnd関数で入れた内容が出るでしょう。

    キャンセル

  • 2017/03/05 20:57

    ありがとうございます。
    どうやら私がGAS、HTML、javascriptの関数やコマンドでの処理の流れを理解しきれていないことが原因の様です。
    kei334さんのお陰でその事に気付き、問題解決に進展がありました。
    もう少し基本的な知識を身に付けてみようと思います。
    この度は貴重なお時間とご返答を頂き本当に有難うございました。

    キャンセル

  • 2017/03/08 21:54

    連投失礼いたします。
    本件、GASが用意しているgoogle.script.runが「非同期処理」であるために起きた現象でした。
    小生、プログラムにおける同期非同期の概念が抜けていたため今回の事象が理解できなかった次第です。
    google.script.runで指定する関数はサーバー側にリクエストを投げ、DBを読み込みデータ取得し応答するという内容のものでして、非同期に処理されておりました。
    その為クライアント(HTML)サイドのアラートとのタイミングのズレが発生していたと理解しました。
    kei344様、沢山の的確なアドバイスとヒントを頂き本当に有難うございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    GASでHTMLファイルの内容がスプレッドシートに送れない

    プログラミング初心者です。 初めて投稿させていただきます。 現在Apps scriptを使ってHTMLファイルから入力された情報をスプレッドシートに書き込むというプログラムを作

  • 解決済

    GAS Webアプリケーション画面でフォーム入力後、画面が真っ白になってしまいます

    前提・実現したいこと iPad画面で番号入力フォームが表示されている 番号を入力した時に、入力した番号と入力時間がスプレッドシートに 反映されるようにしたい 発生してい

  • 解決済

    GAS⇔html間の値の渡し方

    前提・実現したいこと GASでVBAでいうとユーザーフォームのようなものを作るために、UserForm.htmlを作成し、そこにテキストボックスなどを配置し、その値をGAS側で受け

  • 解決済

    GAS⇔HTML間の配列のやり取り()

    前回似たような質問をさせていただいたのですが、別の方式を使ったほうが良いとのことで改めてコードを書き直して質問させていただきます。今回も配列の受け渡しなのですが、配列として認識して

  • 受付中

    gasで自身をスクレイピングしたい

    前提・実現したいこと google apps scriptでwebアプリを公開しました そのscriptから、定期的に自身にアクセスを当て、スクレイピングしたいと思い、以下のコード

  • 解決済

    GASでFor文の入れ子がうまくいかない

    普段はプログラミングとは全然関係のない仕事をしています。 調べながらGASを書いてみたのですが、うまくいきません。 下記、ヒントをいただけますと幸いです。 前提・実現したいこと

  • 解決済

    GASでscript内の変数をoptionに入れる方法

    GASのhtmlファイル内でscript を書き、その変数をそのhtmlファイル内の optionのvalue に入れ込みたいです。 <script> var koumoku

  • 解決済

    GAS⇔HTML条件抽出表示

    GASにてHTML内のテキストボックスに店コードを入れて、スプレッドシートに記載されている 内容から検索・その抽出結果をHTMLへ全て表示させたいです。 該当する条件でヒットす

同じタグがついた質問を見る

  • HTML

    8946questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。