AJAX发布到谷歌电子表格

时间:2012-04-03 19:26:51

标签: jquery ajax google-apps-script google-sheets

我正在尝试将表单数据发布到Google电子表格中。目前,如果表单已经过验证,则会发生以下情况:

if (validateForm === true) {
        $.ajax({
            type: 'post',
            url: 'https://docs.google.com/spreadsheet/ccc?key=0AlwuDjMUxwhqdGp1WU1KQ0FoUGZpbFRuUDRzRkszc3c',
            data: $("#workPLZ").serialize(),
            success: alert($("#workPLZ").serialize())
        });
    }
    else {}

我使用成功设置来验证我的表单数据是否正确序列化(它是)并且它是成功的。但是,我的Google电子表格没有更新(没有数据通过)。我在这里使用了示例代码,将doGet更改为doPost(http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/),并使Google电子表格公开可用(并且可由任何人编辑)。我按照说明,将代码复制到googledocs,然后运行setUp两次(第一次请求许可,第二次我运行它我没注意到任何事情发生)。谁能帮我?我觉得我非常接近。

3 个答案:

答案 0 :(得分:35)

好吧,我想出了一个解决方案。在被告知跨域AJAX问题之后,我决定继续使用文章作者在http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/处使用的方法。

要将数据发布到Google电子表格,请首先制作电子表格并将表格名称(左下角)更改为DATA。接下来,在电子表格中打开脚本编辑器(Tools ==> Script Editor)并粘贴文章中的脚本。将“doGet(e)”更改为“doPost(e)”。运行setUp脚本两次。它第一次要求运行许可(授予它),然后第二次选择运行它你将不会得到它运行的任何弹出指示(我在编辑器中运行我的,所以它说“运行setUp”上面代码输入区域,但这就是全部)。之后,在脚本编辑器中选择“发布”,然后选择“发布为服务”。单击“允许任何人调用此服务”单选按钮和“允许匿名访问”复选框。复制URL(重要!)并单击“启用服务”。这是“困难的部分”。

在您的HTML表单中,您提交的每个元素都必须具有“name”属性(例如)此名称是数据的发送方式 - 每个条目都附加到其名称。确保对于您收集的每个表单数据,它都有一个名称,并且该名称在电子表格中作为列输入(这就是它将表单中的数据映射到电子表格的方式)。对于您的表单,将方法设置为发布,并将操作设置为“发布为服务”URL(我告诉您保存),如下所示:

<form id="formID" method="post" action="URL" target="hidden_iframe">

我添加了表单ID,因此我可以选择表单并使用jquery提交。在您的HTML中,在上述表单之前添加隐藏的iframe:

<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;"></iframe>

设置某种表单验证(不是必需的,但是如果没有填写每个字段,您将在电子表格中获得不完整的数据),如果验证它,则调用jquery .submit()。 e.g:

    if (formValidation === true){
           $("#formID").submit();
    }
    else {}

就是这样。祝你好运!

答案 1 :(得分:13)

由于Google Apps脚本现在有一个可以返回JSON响应的ContentService,因此可以在不使用隐藏的iframe的情况下发出ajax请求。作为原始解决方案的文章作者,我published an updated version of this technique which includes an ajax example

用户可能还需要考虑切换到此新版本,因为它会使用其他新的Google Apps脚本服务,尤其是:

答案 2 :(得分:3)

我将向您展示将数据发送到Google SpreadSheet的简单方法,而不使用AJAX,无论是Google表格,还是PHP ......只是Google SpreadSheet和HTML,甚至是Android。

  1. 制作新的Google SpreadSheet。
  2. 打开工具/脚本编辑器
  3. 编辑器中只需要两个文件,一个HTML和一个Code.gs:

    作为一个例子:

    1. 转到文件/新HTML名称此文件= Index.html:

      <!DOCTYPE html>
      <html>
      <head>
      <base target="_top">
      
      <script>
      function Enviar(){
      
      var txt1=document.getElementById("txt1").value;
      var txt2=document.getElementById("txt2").value;
      var txt3=document.getElementById("txt3").value;
      google.script.run.doSomething(txt1,txt2,txt3);
      }
      </script>
      </head>
      
      <body>
      Prueba de Envio de informacion<br>
      <input type="text" value="EMAIL" name="txt1" id="txt1"><br>
      <input type="text" value="CEDULA" name="txt2" id="txt2"><br>
      <input type="text" value="NOMBRE" name="txt3" id="txt3"><BR>
      <Button name="btn1" onClick="Enviar();">Enviar</button>
      </body>
      
      </html>
      
    2. 要发送3个字段:EMAIL,CEDULA,NOMBRE

      1. 在同一个ScriptEditor中,转到de Code.gs文件并输入:

        function doGet() {
        return HtmlService.createHtmlOutputFromFile('Index')
        .setSandboxMode(HtmlService.SandboxMode.IFRAME);
        }
        
        function doSomething(s1,s2,s3){
        
        Logger.log('datos:'+s1+"  "+s2+"  "+s3);
        var enlace="https://docs.google.com/spreadsheets/d/
        1XuAXmUeGz2Ffr11R8YZNihLE_HSck9Hf_mRtFSXjWGw/edit";
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var ss = SpreadsheetApp.openByUrl(enlace);
        var sheet = ss.getSheets()[0];
        sheet.appendRow([s1, s2, s3]);
        Logger.log(ss.getName());
        }
        
      2. 其中enlace是您的SpreadSheet的网址

        1. 发布为应用程序应用程序并获取新脚本的URL。现在您可以将此URL用作嵌入HTML应用程序或Android应用程序中。而已。将要求用户允许打开此脚本