使用Google应用程序脚本将数组传递给客户端函数

Passing an array to client side function using Google apps script?

本文关键字:客户端 函数 数组 Google 应用程序 脚本 使用      更新时间:2023-09-26

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()。在那个函数中,我使用google.script.run类调用服务器端函数myFuncti(),这将返回我传递给客户端函数myfunction()的数组作为参数。

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

这是一个2D阵列。。我把它按正确的方式传给myFunction()吗?

如果你不能理解问题中的任何内容,请添加一条评论,我会回复

这就是代码需要的样子,注意使用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];
}

这是一个工作演示和脚本。

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

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

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

一些猜测:

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

此外,您在if的大括号内声明变量"a",但随后在这些大括号外赋值,也许您的意思是:

for(i=0;i<arry.length;++i) 
{
   if(arry[i][0] == x)   
   {
      var a = arry[i][1];
     document.getElementById("demo").innerHTML = a;
   }
}