开发者问题收集

Html 和 Javascript 与 google 脚本函数错误

2021-06-09
353

使用 Google Script,我创建了这个 html,它将数据发送到 google sheet,从 url 输入一些数据(在 /exec?P=tonno&Q=3&C=Cliente+1 之后,他输入了 P、Q、C):

<!DOCTYPE html>
<html>
  <head>
    <title> Modulo di Ordine </title>
  <script type="text/javascript">
    function doGet(e){ 
  //HtmlService.setTitle("This is MYTITLE"); 
  var result = '<-- Riepilogo Ordine --> \n';
  if (e.parameter == 'undefined') {
    result += "ERRORE SCONOSCIUTO NELL'ACQUISTO! non verrà inviato l'ordine";
    return ContentService.createTextOutput(result); 
  }
  else {
    
    var ID = '1sl0P4auOdX8i67kZ9LA8dGXm59I_fc_tSOaPaOpL1Ek';    //  identificativo della cartella di foglio (Spreadsheet ID)
//    var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();
//    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var Cartella = SpreadsheetApp.openById(ID);    // Cartella identificata da ID
    var Foglio = Cartella.getSheets()[0];          // nella parentesi quadra il foglio ---> 0 = primo, 1 = secondo, ecc. 
    var Cella_R = Foglio.getRange(2,5);            // riga 2, colonna 5 -> cella E2
    var Inserite = Cella_R.getValue() + 1;         // numero di righe inserite (letto dal foglio) incrementato di 1
    Cella_R.setValue(Inserite);                    // scrive nel fogio il valore incrementato di «Inserite»
    //    var Riga = Foglio.getLastRow() + 1;   
    var Riga = Inserite + 2;                       // Riga in cui  scrivere i dati
    result += 'Codice Ordine: #' + Riga;            // calcola la riga su cui scrivere i dati
    var Cella_D = Foglio.getRange(Riga,1);         // D = Data --------------> colonna 1
    var Cella_O = Foglio.getRange(Riga,2);         // O = Orario ------------> colonna 2
    var Cella_T = Foglio.getRange(Riga,3);         // T = Temperatura -------> colonna 3
    var Cella_U = Foglio.getRange(Riga,4);         // U = Umidità relativa --> colonna 4
    var Cella_C = Foglio.getRange(Riga,5);         // C = Cliente ----------->
    var answer = "";
//    SpreadsheetApp.setActiveSheet(sheet);
//    var rowData = [];
    var Giorno_Ora = new Date();                                                  // legge data ed ora attuali     
    var Data   = Utilities.formatDate(Giorno_Ora, "Europe/Rome", 'dd/MM/yyyy');   // estrae la data da Data_Ora 
    var Orario = Utilities.formatDate(Giorno_Ora, "Europe/Rome", 'HH.mm.ss'  );   // estrae l'orario da Data_Ora

    Cella_D.setValue(Data);                                 //scrive la Data
    Cella_O.setValue(Orario);                               //scrive l'orario
    for (var parametro in e.parameter) {        
      var valore = Pulisci(e.parameter[parametro]);         //estrae il valore del paramentro senza virgolette 
      
      switch (parametro) {     // condizione case   
        case 'P':
          Cella_T.setValue(valore);   // Scrive il prodotto
          result += '\nProdotto: ' + valore + '';    // Scrive messaggio risposta
        break;
        case 'C':
          Cella_C.setValue(valore);       // Scrive il cliente
          result += '\nCliente: ' + valore + '';     // Scrive messaggio risposta
        break;
        case 'Q':
          Cella_U.setValue(valore);      // Scrive la quantità
          result += '\nQuantità: ' + valore + ' pezzi';   // Scrive messaggio risposta
         break;  
        default:  //in caso di errore:
          result += "\n\nParametri non validi!. L'ordine non verrà preso in considerazione";
      }
    } //se tutto va bene passa avanti con il successo
    result += '\n\nEseguito con successo! Qualcuno provvederà a prendere in considerazione il suo ordine.';     
  }
  return ContentService.createTextOutput(result);   // Restituisce il Riepilogo dell'ordine
}
function Pulisci( value ) {
  return value.replace(/^["']|['"]$/g, "");  // sostituisce cosa a cosa???
}
  </script>
  </head>
<body>
    <p>Sicuro di voler procedere con l'ordine?</p> <br>
    <input id="clickMe" type="button" value="clickme" onclick="doGet();" />
</body>
</html>

问题是,当我按下按钮调用函数 doGet() 时,出现此错误,并且该函数无法继续:

userCodeAppPanel:5 Uncaught TypeError: Cannot read property 'parameter' of undefined
    at doGet (userCodeAppPanel:5)
    at HTMLInputElement.onclick (userCodeAppPanel:1)

有人可以帮帮我吗?

2个回答

ContentService、SpreadsheetApp 甚至 doGet(e) 都是服务器端函数,它们在 Google 服务器上运行,而不是在您的浏览器上运行。您需要重构整个代码,并利用一些中间 javascript 函数,可能还有 google.script.run,最好对 SO 上提供的一些示例进行更多研究。

将 doGet(e) 用作客户端函数的想法相当荒谬,因为整个想法是它应该是服务器上的一个端点。将其视为客户端函数是荒谬的。

Cooper
2021-06-09

要解决您面临的问题,您需要将按钮 HTML 元素更改为以下代码 -

<input id="clickMe" type="button" value="clickme" onclick="doGet(event);" />

由于您使用的是内联事件处理程序,因此您需要 将事件作为参数传递给 onClick 方法 。如果您有任何疑问,请参阅 此帖子

jateen
2021-06-09