1

我正在尝试在托管在 Google Drive 上的 html 中使用 jquery 和数据表。数据表的数据将来自使用内容服务的 Apps 脚本。我正在使用数据表示例。托管的html是:

        <title>JQUERY  DataTables Page  Hosted in Google Drive </title>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />

    <title>JQUERY  DataTables Page  Hosted in Google Drive </title>

    <link rel="stylesheet" type="text/css" href="//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css">
    <script type="text/javascript" charset="utf8" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.min.js"></script>
    <script type="text/javascript" charset="utf8" src="//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
    <script type="text/javascript" charset="utf8">

    $(document).ready( function () {
         $('#demo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>' );
       $('#example').dataTable( {
          "bServerSide": false,
          "sAjaxSource": "https://script.google.com/macros/s/AKfycbyFGmeMnn2hlRWe1XHTgcOI4nSyi_HcJOYSg2jfBe8b-5qXPUs2/exec"
        });
     });
    </script>
    </head>
    <body>
    <h1>JQUERY  DataTables Page  Hosted in Google Drive </h1>
    <p>Default dataTable with embedded data</p>
    <p>Includes sorting, paging and filtering by default.</p>
    <p>Entire data table loaded in one hit.</p>
    <div id="demo"></div>

    </body>
    </html>

包含 ready 函数的脚本在http://live.datatables.net/测试工具中运行良好。应用程序脚本发布给任何人,甚至是匿名的。用实际的表替换应用程序脚本调用会导致工作页面。

  1. 我需要做什么才能使这个工作(可能是跨域问题?)
  2. 鉴于当前问题的解决方案...对于要提交的数据对域或用户组私有的情况,我应该如何处理身份验证
4

2 回答 2

3

关于 1. 你应该发布 jsonp 请求。因为谷歌应用程序脚本没有添加“Access-Control-Allow-Origin”标头。

大约2。

如果用户未登录,Google Apps 脚本的身份验证始终返回 html 页面。

如果你需要处理登录状态,你应该在 jsonp 请求上处理它。

如果你想只允许访问域或组用户,你应该设置'我''执行应用程序'并通过 Session.getActiveUser().getEmail() 检查用户电子邮件地址,但它只能应用程序帐户。

这是我类似的应用程序,它在客户端使用 angularjs,但可能只是你的提示。

https://plus.google.com/u/1/112329532641745322160/posts/1EpJUYP7mfm

于 2013-03-12T09:27:51.703 回答
0

使用 javascript 控制台( Chrome 中的Ctrl++ ShiftJ找出您遇到的错误。搜索错误。获取此页面。请注意,它说您的桌子内必须有一个。添加以下内容,而不是您拥有的当前表。

<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
  <thead>
    <tr>
      <th>Column 1</th>
      <th>Column 2</th>
      <th>Column 3</th>
      <th>Column 4</th>
      <th>Column 5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Row 1</td>
      <td>Row 2</td>
      <td>Row 3</td>
      <td>Row 4</td>
      <td>Row 5</td>
    </tr>
  </tbody>
</table>

您可以Session.getActiveUser()在您的应用程序脚本中使用来确定谁在运行该脚本,并从那里决定是否返回数据,或不返回数据。

于 2013-03-12T13:30:35.300 回答