Google应用脚本数据返回未定义状态

时间:2018-09-03 08:49:59

标签: jquery html json google-apps-script

我试图将数据从网页提交到Google电子表格,我从在线教程中复制了代码,并根据需要进行了调整。原始代码中如果有两个输入和一个提交按钮,则我尝试对其进行更改,因此我应该能够有两个提交按钮,并且每个按钮将仅提交一个输入数据。

我一直在苦苦挣扎的问题是,我无法让一个输入数据显示出来而没有另一个输入数据说未定义或根本不显示。我还希望两个输入都显示在彼此相邻的同一行上。

在示例中:我希望“时钟输入”-这是我的第一个按钮出现在第1行第1列中,而“时钟输出”出现在第1行第1列中。请注意,这些按钮将不会在在同一时间。

我坚信这段代码是一团糟,但是我已经删除并进行了很多调整,以至于我不知道该怎么做。

我的第一个代码是code.gs,它在我的Google应用程序脚本中。

我将非常感谢您的帮助,这件事已经使我发疯了。

请注意,这是我第一次发布问题,因此如果我在某个地方出错了,可以告诉我。

谢谢

function doGet(e){
  
  var op = e.parameter.action;

  var ss = SpreadsheetApp.openByUrl("My spreadsheet url goes here");
  var sheet = ss.getSheetByName("input-test");


  if(op=="insert")
    return insert_value(e,sheet);

  
 if(op=="insert")
    return insert_value2(e,sheet);
 }


function insert_value(request,sheet){
 
 var id = request.parameter.id;
 var name = request.parameter.name;

  

  var flag=1;
  var lr= sheet.getLastRow();
  for(var i=1;i<=lr;i++){
    var id1 = sheet.getRange(i, 2).getValue();
    if(id1==id){
      flag=0;
  var result="Id already exist..";
    } }
  //add new row with recieved parameter from client
  if(flag==1){
  var d = new Date();
   var currentTime = d.toLocaleString();
  var rowData = sheet.appendRow([id,name]);//if I take off name id won't work at all
  var result="Insertion successful";
  }
     result = JSON.stringify({
    "result": result
  });  
    
  return ContentService
  .createTextOutput(request.parameter.callback + "(" + result + ")")
  .setMimeType(ContentService.MimeType.JAVASCRIPT);   
  }

function insert_value2(){

  var id = request.parameter.id;
  var name= request.parameter.name;

  var rowData = sheet.appendRow([id,name]); //if i take off id name won't work at all
     
}
<!DOCTYPE html>
<html lang="en">
<head>
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
  
  var script_url = "i have my google sheet link here";
  
  function insert_value() {
 
    var id1 = $("#id").val();
 
    var url = script_url+"?callback=ctrlq&id="+id1+"&action=insert";
 
    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
      method: "GET",
      dataType: "jsonp"
    });
 
  }
 
  function insert_value2() {
 
  var name = $("#name").val();
  
    var url = script_url+"?callback=ctrlq&name="+name+"&action=insert";
 
    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
     method: "GET",
      dataType: "jsonp"
    });
 
  }
 
  function ctrlq(e) {
 
}
 
</script>
 
</head>
<body>
 
<form name="submit-to-google-sheet">
 
  <div class="time-inputs clock-in text-center">
     <h4>Clock In Time</h4>
        <input name="Clock-In" type="time" id="id">
       <input class="enter-time-btn btn btn-secondary shadow-none" type="submit" value="Enter Time" id ="clockInBtn" onClick="insert_value()">
  </div>
  </form>
  
  <br>
  
  <form name="submit-to-google-sheet">
  
  <div class="time-inputs clock-out text-center">
        <h4>Clock Out Time</h4>
        <input  name="Clock-Out" type="time" id="name">
        <input class="enter-time-btn btn btn-secondary shadow-none" type="submit" value="Enter Time" id ="clockOutBtn" onClick="insert_value2()">
  </div>
  </form>
    
  </body>
  </html>

1 个答案:

答案 0 :(得分:0)

从我所见,您的Code.gs中的以下代码片段将永远不会被调用。

if(op=="insert")
 return insert_value2(e,sheet);

因为第一个if语句也为true,并且执行从那里返回。

我建议进行以下更改,看看是否可以解决问题。

在您的HTML文件中:

function insert_value() { 
 var id1 = $("#id").val();
 var url = script_url+"?callback=ctrlq&id="+id1+"&action=insert_checkIn";

类似地

function insert_value2() {
 var name = $("#name").val();
 var url = script_url+"?callback=ctrlq&name="+name+"&action=insert_checkOut";

在您的Code.gs内部

if(op == "insert_checkIn")
  return insert_value(e,sheet);
if(op=="insert_checkOut")
  return insert_value2(e,sheet);

希望有效。