【问题标题】:Client successHandler gets null, but server logs show results客户端成功处理程序为空,但服务器日志显示结果
【发布时间】:2016-07-25 12:13:06
【问题描述】:

我正在尝试在 Google Sheet 侧边栏中的 HTML iframe 中列出 Google 电子表格的所有编辑器。正如您在下面的代码中看到的,我在 Logger 中显示了结果;它在那里工作,向我显示编辑列表。但是当我使用google.script.run 将结果传递给 HTML 文件时,它似乎在途中“迷路”了。我没有收到任何错误,只有侧边栏中的“空”列表。

我在 .gs 中有以下代码:

function myFunction() {
  var html = HtmlService.createHtmlOutputFromFile('form1');
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .showSidebar(html);
}

function editores() {
  var editors = SpreadsheetApp.getActiveSpreadsheet().getEditors();
  for (var i = 0; i < editors.length; i++) {
    var editor = editors[i];
    Logger.log(editor)
    }
  return editors;    
}

HTML 中的这段代码:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
    function listEditors(editors) {
      for (var i = 0; i < editors.length; i++) {
        var eltag = document.getElementById('edit').innerHTML;
        var edit = editors[i];
        document.getElementById('edit').innerHTML = eltag+'<br/>'+edit;
      }
    }

    google.script.run.withSuccessHandler(listEditors).editores();
    </script>
  </head>
  <body>

    <p id='edit'></p>
  </body>
</html>

当我执行myFunction() 时,它会打开显示“null”列表的侧边栏。但是当我在脚本控制台中打开 Logger 时,它会很好地显示编辑器列表......似乎数据在通过的过程中“丢失”了。

【问题讨论】:

  • 由于某种原因 getEditors 现在对我不起作用,但除此之外您的代码运行良好,您在 javascript 控制台中看到任何错误吗?
  • 没有错误,只是侧边栏中的“空”列表

标签: javascript google-apps-script google-sheets google-docs


【解决方案1】:

您正在传递一组 Google Apps 脚本 User objects,由于只能将简单对象返回给客户端*,因此结果为 null

解决此问题的一种方法是使用getEmail() 将每个用户的地址作为字符串获取,并返回这些地址的数组:

function editores() {
  var editors = SpreadsheetApp.getActiveSpreadsheet().getEditors();
  var editorStrArray = [];
  for (var i = 0; i < editors.length; i++) {
    var editor = editors[i];
    Logger.log(editor);
    editorStrArray.push(editor.getEmail())
  }
  return editorStrArray;    
}

*google.script.run 的文档说返回值(到 successHandlers)的规则与服务器端函数的参数相同,具体来说:

合法参数是 JavaScript 基元,如 Number、Boolean、String 或 null,以及由基元、对象和数组组成的 JavaScript 对象和数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2012-08-03
    • 2011-03-05
    • 1970-01-01
    • 2013-03-18
    • 2011-01-03
    相关资源
    最近更新 更多