2017-10-25 31 views
0

Google Apps Script doGet(e)メソッドでクエリパラメータを処理しようとしています。私はパラメータ(またはパラメータの欠如)に基づいて異なるHTMLを提供する以下の単純なdoGet()関数を定義しました。 doGet(e)パラメータが未定義

function doGet(e) { 
    Logger.log('In doGet'); 
    Logger.log('query params: ' + e); 
    var isNull = (e.queryString == null); 
    var len = e.parameters.length; 
    Logger.log('query string is null: ' + isNull); 
    Logger.log('number of params: ' + len); 
    if (e.queryString == null) { //doesn't work! 
    Logger.log('Serving loginUI'); 
    return HtmlService 
    .createHtmlOutputFromFile('loginUI') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .addMetaTag('viewport', 'width=device-width, initial-scale=1') 
    .setTitle("Please log in"); 
    } 
    //if here, we know query string is NOT null 
    if (e.parameter.mode == "player") { 
    return HtmlService 
    .createHtmlOutputFromFile('playerUI') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .addMetaTag('viewport', 'width=device-width, initial-scale=1') 
    .setTitle("Following Player"); 
    } 
    if (e.parameter.mode == "hole") { 
    return HtmlService 
    .createHtmlOutputFromFile('playerUI') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .addMetaTag('viewport', 'width=device-width, initial-scale=1') 
    .setTitle("Following Hole"); 
    } 
    if (e.parameter.mode == "flex") { 
    return HtmlService 
    .createHtmlOutputFromFile('flexUI') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .addMetaTag('viewport', 'width=device-width, initial-scale=1') 
    .setTitle("Flex Interface"); 
    } 
} 

あなたは私のログコードから見ることができるように

は、私がeパラメータがのdoGet()がもともとクエリパラメータなしで呼び出された場合にあるかを把握するのは難しいしようとしています。ログの出力は次のとおりです。

> [17-10-24 18:14:48:557 PDT] Starting execution [17-10-24 18:14:48:565 
> PDT] Logger.log([In doGet, []]) [0 seconds] [17-10-24 18:14:48:566 
> PDT] Logger.log([query params: [object Object], []]) [0 seconds] 
> [17-10-24 18:14:48:566 PDT] Logger.log([query string is null: false, 
> []]) [0 seconds] [17-10-24 18:14:48:567 PDT] Logger.log([number of 
> params: undefined, []]) [0 seconds] [17-10-24 18:14:48:568 PDT] 
> Execution succeeded [0.003 seconds total runtime] 

e.parametersにクエリパラメータがない場合の対処方法を教えてください。この場合、eは定義されていないように見えます。何か案は?

私の考えは、doGetが提供するhtmlファイルに関連付けられたjavascriptでクエリ文字列を作成することです。次のように上記のコードでいう「loginUI.html」ファイルでは、例えば、私は、異なるパラメータでgoogle.script.run.doGet()を呼び出しjqueryのコードを含める:

<script> 
    $("#playerUI").click(function() { 
    var queryString = "?mode=player"; 
    google.script.run.doGet(queryString); 
    }); 

    $("#holeUI").click(function() { 
    var queryString = "?mode=hole"; 
    google.script.run.doGet(queryString); 
    }); 

    $("#flexUI").click(function() { 
    var queryString = "?mode=flex"; 
    google.script.run.doGet(queryString); 
    }); 
</script> 

マイこれはどちらもうまくいきません。お知らせ下さい。

+0

このサイトの質問には、唯一の質問([ask]参照)が含まれている必要があります。新しい質問として「フォローアップ」質問を投稿することをお勧めします。 –

答えて

1

e.parametersにクエリパラメータがない場合をどのように処理できますか。この場合、eは定義されていないように見えます。何か案は?オブジェクトの使用JSON.stringify(object)の内容をログのGoogle Appsスクリプトエディタへの書き込みを

短い答え

function doGet(e) { 

    Logger.log('queryString is an empty string: ' + (e.queryString === '')); 
    Logger.log('parameter hasn\'t members: ' + (Object.keys(e.parameter).length === 0)); 
} 

説明

例:

function doGet(e) { 
    Logger.log(JSON.stringify(e)); 
} 

ログに次のテキストを印刷し、上記コード:

[17-10-24 21:13:28:414 CDT] { "パラメータ": {}、 "のcontextPath": ""、 "ん。ContentLength": - 1、 "のqueryString": ""、 "パラメータ":{}}

あなたが見ることができるように、いくつかの名前付きの値がある:

は、
  • パラメータ:リクエストパラメータに対応するキーと値のペアのオブジェクト。複数の値を持つパラメータの場合、最初の値のみが返されます。
  • contextPath:使用しません。常に空文字列。
  • ん。ContentLength:常に-1を返しますdoGetメソッド
  • のqueryStringのために:URLのクエリ文字列部分の値。
  • パラメータ:eに似たオブジェクトです。パラメータが、各キー

の値のアレイを有する参照

注:最初の基準は、クエリー文字列である場合のqueryStringがnullを返すことを言います私が作ったテストでは、これは真実ではありませんでした。

+0

ありがとう@Rubén!空のqueryStringのテストが機能します!私は比較のためにもう一つの等号( '===')が必要でした。フォローアップの質問に関するアイデアはありますか?どうやってdoGet()を呼び出し、適切にqueryStringを渡すことができますか?私は提案されたコードのアプローチがうまくいくとは思わない。 – SpeedGolfer

関連する問題