使用Google应用脚本将数组传递到客户端功能?

时间:2015-03-03 18:04:52

标签: javascript html google-apps-script

HTML

<html>
<table>

 <tr>
  <select id="Ultra"  onchange="getForm()">
          <option value="0.0">1</option>
          <option value="1.0">2</option>
          <option value="2.0">3</option>
          <option value="3.0">4</option>
      </select>
   </tr>
<tr>

<td id="demo">
 <script>

function getForm()
            {
         google.script.run.withSuccessHandler(myFunction).myFuncti();
         }
        function myFunction(arry) 
        { 
           var x = document.getElementById("Ultra").value;
           for(i=0;i<arry.length;++i)
           {
             if(arry[i][0] == x)
             {
              var a = arry[i][1];
              }
              document.getElementById("demo").innerHTML = a;

             }

       }


   </script>
   </td>
   </tr>

</table>
</html>

我使用select创建了一个下拉菜单,之后我调用了客户端函数getForm()。在该函数中,我使用myFuncti()类调用服务器端函数google.script.run,这将返回一个数组,我将其传递给客户端函数myfunction()作为参数。

如果使用Logger.log(),服务器端函数将成功返回数组值!!

它是一个2D数组..我是否正确地将它传递给myFunction()

如果您对问题无法理解,请添加评论我将回复

2 个答案:

答案 0 :(得分:2)

这是代码需要的样子,请注意在客户端使用console.log()进行调试(CTRL-SHFT-I通常在浏览器中打开开发人员控制台窗口):

<强>的index.html

<div>
  <select id="Ultra" onchange="getForm()">
    <option value="1.0">1</option>
    <option value="2.0">2</option>
    <option value="3.0">3</option>
    <option value="4.0">4</option>
  </select>
  <p id="demo"></p>
</div>

<script>

function getForm() {

  google.script.run.withSuccessHandler(myFunction).myFuncti();
}

function myFunction(arry) {

  var x = document.getElementById("Ultra").value;
  var y = parseInt(x, 10);
  var i = 0;
  var a;

  console.log('x (string) = ' + x);
  console.log('y (number) = ' + y);  
  console.log(arry);

  for (; i < arry.length; i++) {

    a = arry[i];

    console.log('a = ' + a);

    if (a === y) {

      console.log('a === y');
      document.getElementById("demo").innerHTML = a;
    }
  }
}

</script>

<强> code.gs

function doGet(form) {

  return HtmlService
    .createHtmlOutputFromFile('index');
}

function myFuncti() {

  return [1, 2, 3, 4];
}

以下是a working demothe script

答案 1 :(得分:0)

根据文档,您可以直接从服务器端函数返回数组,并直接在客户端使用Javascript。

相关文档:https://developers.google.com/apps-script/guides/html/communication#parameters_and_return_values

使用浏览器的开发者工具调试客户端Javascript。

一些猜测:

您的问题可能与您在客户端访问阵列的方式有关,可能if(arry[i][0] == x)永远不会匹配,或者您对{1}}的索引1而不是0的引用不正确

你也在声明变量&#34; a&#34;在if的括号内,但是然后将它分配到那些括号之外,也许你的意思是:

var a = arry[i][1];