2017-03-20 13 views
0

コードサイドで配列を作成していますが、これをHTMLサービスに戻そうとしています。私はオブジェクトをstringifiyingしていると私はロガーを実行するときに私はそれが正しい情報を送信していることがわかります。しかし、それがHTML側に戻ったとき、私は何を試しても「未定義」または空の配列を見ているだけです。どんな助けもありがとうございます。コードは以下の通りです:問題をGoogle AppsスクリプトのHTMLに戻す

ここではhtml側です。

function editFunction(){ 
//I start by passing an object over to the code side, based on user input 


var userChoice = document.getElementById("userChoice").value; 

google.script.run 
.editJob(userChoice); 

//Code side gathers some information based on user input formats into arrays 
//and sends back...theoretically 

<?var editData = editJob();?> 
var returnedValues =JSON.parse(<?=editData?>);//object parsed 
    var arrayOfValues = []; 
     for (var n in returnedValues) { 
     var thisValue = returnedValues[n]; 
     arrayOfValues.push(thisValue);//object reformatted as an array 
      } 



document.getElementById("instructions").value = arrayOfValues[1]; 
//desired out put part of the array` 
} 

これは、コード側である:

function editJob(userChoice){ 
    var ss = SpreadsheetApp.openById('1emoXWjdvVmudPVb-ZvFbvnP-np_hPExvQdY-2tOcgi').getSheetByName("Sheet1"); 
    var jobReference = []; 
    var job; 
    //uses user input to gather necessary information and puts into arrays 

    for (var i = 1; job!=""; i++){ 
    job = ss.getRange(i,27).getValue(); 
    jobReference.push(job); 
    }; 

    for(var n=1; n<jobReference.length;n++){ 
    if(jobReference[n]==userChoice){ 
     break; 
    } 
    }; 

    var returnEdit = []; 
    for (var int =1; int<28;int++){//update int< for number of column 
    var value = ss.getRange(n+1,int).getValue(); 
    returnEdit.push(value); 
    };//final array now formed 
    var returnStringified = JSON.stringify(returnEdit); 
Logger.log(returnStringified); 
    return returnStringified //stringified results theoretically sent over 

} 
+0

この行の 'var value = ss.getRange(n + 1、int).getValue();'は何ですか? – Cooper

+0

nは上記のforループによって生成される番号です。コードのその部分は、接続されたスプレッドシートの特定の行にあるすべてのものを収集し、次のforループを介して配列に格納できるようにします。正しい情報(スプレッドシートの正しい行)を収集しています。 –

+0

あなたはjobReference [n] == userChoiceをどうやって知っていますか?多分、nはちょうど過去のjobReference.lengthをインクリメントしています。 – Cooper

答えて

0

あなたの機能はgoogle.script.run.editJob(userChoice);

後にあなたが成功する上で実行すると、好ましくは、1が同様のエラーで実行するように第2の機能を必要と終了します。以下のサンプルのための関数名successFunction()および誤差関数()されています

google.script.run.withSuccessHandler(successFunction).withFailureHandler(errorFunction).serverSideFunc(); 

serverSideFunction()は、サーバー側で実行する関数の名前です。

成功すると新しい関数を作成し、その関数にデータを戻します。大雑把に、基本的なアイデアを与えるするしかwothoutデバッグが、それは次のようになります。 関数editFunction(){

//I start by passing an object over to the code side, based on user input 

var userChoice = document.getElementById("userChoice").value; 

google.script.run 
    .editJob(userChoice); 
    .withSuccessHandler(
} 

function handleTheData(returnedValues) { 

    var arrayOfValues = []; 
     for (var n in returnedValues) { 
     var thisValue = returnedValues[n]; 
     arrayOfValues.push(thisValue);//object reformatted as an array 
      } 



document.getElementById("instructions").value = arrayOfValues[1]; 
//desired out put part of the array` 
} 

documentation for google.script.runを参照してください。

+0

これは完璧な意味合いがあります!ありがとう。私はそれがどのように進むのかを知らせます。 –

+0

これは魅力的に機能しました。本当にありがとう。 –

0

私はあなたの質問はすでに答えられていると思うが、私はちょうどサーバ側の機能がそれ自身でデータを送ることができないことを指摘したかった。 クライアントサイドのコードは、1つのパラメータとしてまとめられた値の束を返すことができるサーバ側の関数を呼び出さなければなりません。クライアントがより多くのデータを持つ必要がある場合は、別のサーバー側の関数を呼び出して必要なデータを取得するのはクライアント側のコードまでです。 短いサーバー側では、クライアント側が要求するものだけに応答します。独自のサーバーサイドコードでは、任意のデータを送信することはできません。

関連する問題