如何使用JavaScript将数据从HTML表单发送到Google Spreadsheet?

时间:2017-06-17 05:57:11

标签: javascript jquery json google-sheets google-apis-explorer

我正在尝试构建一个记录Google电子表格中表单数据的网络应用程序。为此,我 使用JavaScript(JSON或AJAX请求也可以),但我无法使用Google Apps脚本,因为我需要用户继续使用我的页面和GAS不允许它。

我并不太了解JSON请求,但我试图添加一个:没有意外,它没有工作也没有惊喜,我不知道为什么。

我不确定我用来提出请求的网址和代码是否正确,但不知道如何处理,很难知道我的错误是什么代码。

那是我的表格:

    <form name="reqForm" id="reqForm" method="post" action="" accept-charset="UTF-8" enctype="application/json">
            <input type="hidden" name="area" id="area" readonly/>
            <input type="hidden" name="idN" id="idN" readonly/>
            <input type="hidden" name="dataReq" id="dataReq" readonly />
            <label for="nome">* Nome:</label>
            <input type="text" id="nome" name="nome" placeholder="Il tuo nome" />
            <label for="cognome">* Cognome:</label>
            <input type="text"  id="cognome" name="cognome" placeholder="Il tuo cognome" />
            <label for="mat">* Matricola:</label>
            <input type="text" id="mat" name="mat" placeholder="La tua matricola" />
            <label for="mail">* E-mail:</label>
            <input type="text" id="mail" name="mail" placeholder="La tua e-mail" />
            <label for="testo">* Richiesta:</label>
            <textarea id="testo" name="testo" placeholder="Che cosa vuoi chiedere?"></textarea>
            <button type="button" value="Invia" onClick="check()">Invia</button>
        </form>`

隐藏值设置为提供ID号和用户的路径。

check()函数将检查表单并(应该)发出请求并写入GSpreadSheet

    function check() {

document.getElementById('errorForm').innerHTML = "";

var a = document.getElementById('area').value;
var idN = document.getElementById('idN').value;
var n = document.getElementById('nome').value;
var c = document.getElementById('cognome').value;
var m = document.getElementById('mat').value;
var em= document.getElementById('mail').value;
var t = document.getElementById('testo').value;

// check the possible errors and set error messages.
    // if msg is not empty, writes the messages in my page.

} else if(msg == "") {
    var xhr = new XMLHttpRequest();
    var key = mySheetKey, sName =  mySheetName, url = "https://sheets.googleapis.com/v4/spreadsheets/"+key+"/values/"+ sName + ":append?valueInputOption=USER_ENTERED";

    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-type", "application/json");
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4 && xhr.status === 200) {
            var json = JSON.parse(xhr.responseText);
        }
    // Here I should create the object made of my variables I read 
    // from my form at the beginning of the code and send the request that
    // should append my datas to my Spreadsheet

    xhr.send();
    } 
    }

正如我之前所说的,我的代码看起来类似于我在网上找到的几个代码,但它不起作用,我不知道如何理解错误。

请您给我一些提示或建议或一些可以帮助我将数据附加到Google电子表格的示例?

1 个答案:

答案 0 :(得分:4)

包含网络应用示例

的简单电子表格
$(function() {
        $('#btn1').click(validate);
        $('#txt4').val('');
        $('#txt3').val('');
        $('#txt2').val('');
        $('#txt1').val('')
      });
function validate()
{
    var txt1 = document.getElementById('txt1').value || ' ';
    var txt2 = document.getElementById('txt2').value || ' ';
    var txt3 = document.getElementById('txt3').value || ' ';
    var txt4 = document.getElementById('txt4').value || ' ';
    var a = [txt1,txt2,txt3,txt4];
    if(txt1 && txt2 && txt3 && txt4)
    {
      google.script.run
        .withSuccessHandler(setResponse)
        .getData(a);
        return true;
    }
    else
    {
      alert('All fields must be completed.');
    }
}

整个例子:

HTML:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  <div id="data">
    <br />Text 1<input type="text" size="15" id="txt1" />
    <br />Text 2<input type="text" size="15" id="txt2" />
    <br />Text 3<input type="text" size="15" id="txt3" />
    <br />Text 4<input type="text" size="15" id="txt4" />
    <br /><input type="button" value="submit" id="btn1" />
  </div>
  <div id="resp" style="display:none;">
    <h1>Response</h1>
    <p>Your data has been received.</p>
  </div>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
      $(function() {
        $('#btn1').click(validate);
        $('#txt4').val('');
        $('#txt3').val('');
        $('#txt2').val('');
        $('#txt1').val('')
      });

      function setResponse(a)
      {
        if(a)
        {
          $('#data').css('display','none');
          $('#resp').css('display','block');
        }
      }

      function validate()
      {
        var txt1 = document.getElementById('txt1').value || ' ';
        var txt2 = document.getElementById('txt2').value || ' ';
        var txt3 = document.getElementById('txt3').value || ' ';
        var txt4 = document.getElementById('txt4').value || ' ';
        var a = [txt1,txt2,txt3,txt4];
        if(txt1 && txt2 && txt3 && txt4)
        {
          google.script.run
            .withSuccessHandler(setResponse)
            .getData(a);
            return true;
        }
        else
        {
          alert('All fields must be completed.');
        }
      }

      function loadTxt(from,to)
      {
          document.getElementById(to).value = document.getElementById(from).value;
      }

     console.log('My Code');
   </script>
  </body>
</html>

应用脚本:

function getData(a)
{
  var ts = Utilities.formatDate(new Date(), "GMT-6", "yyyy-MM-dd' 'HH:mm:ss");
  a.push(ts);
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Login').appendRow(a);
  return true;
}

function doGet()
{
  var html = HtmlService.createHtmlOutputFromFile('index');
  return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)

}

我的简单电子表格:

enter image description here

好消息是,您现在使用Google Chrome调试器可能要比开始之前好多了。