Получение ошибки «Сценарий завершен, но ничего не вернулся». - PullRequest
0 голосов
/ 24 декабря 2018

Фактическое изображение веб-страницы, которое должно появиться Я получаю ошибку:

"Сценарий завершен, но ничего не возвращен."

Я опубликовал новую версию кода, но по-прежнему получаю сообщение об ошибке после сохранения кода, и появляется сообщение об ошибке «Сценарий завершен, но ничего не возвращен».

Code.gs

function doGet(e) {
  var op = e.parameter.action;
  var ss = SpreadsheetApp.openByUrl("some url");
  var sheet = ss.getSheetByName("Sheet1");

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

  //Make sure you are sending proper parameters 
  if (op == "read")
    return read_value(e, ss);

  if (op == "update")
    return update_value(e, sheet);

  if (op == "delete")
    return delete_value(e, sheet);
}

//Recieve parameter and pass it to function to handle
function insert_value(request, sheet) {
  var id = request.parameter.id;
  var country = 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([currentTime, id, country]);  
    var result="Insertion successful";
  }
  result = JSON.stringify({
    "result": result
  });  

  return ContentService
    .createTextOutput(request.parameter.callback + "(" + result + ")")
    .setMimeType(ContentService.MimeType.JAVASCRIPT);   
  }

function read_value(request, ss) {
  var output  = ContentService.createTextOutput(),
      data = {};
  //Note : here sheet is sheet name , don't get confuse with other operation 
  var sheet = "sheet1";

  data.records = readData_(ss, sheet);

  var callback = request.parameters.callback;
  if (callback === undefined) {
    output.setContent(JSON.stringify(data));
  } else {
    output.setContent(callback + "(" + JSON.stringify(data) + ")");
  }
  output.setMimeType(ContentService.MimeType.JAVASCRIPT);
  return output;
}


function readData_(ss, sheetname, properties) {
  if (typeof properties == "undefined") {
    properties = getHeaderRow_(ss, sheetname);
    properties = properties.map(function(p) { return p.replace(/\s+/g, '_'); });
  }

  var rows = getDataRows_(ss, sheetname),
      data = [];
  for (var r = 0, l = rows.length; r < l; r++) {
    var row = rows[r],
        record = {};

    for (var p in properties) {
      record[properties[p]] = row[p];
    }
    data.push(record);
  }
  return data;
}

function getDataRows_(ss, sheetname) {
  var sh = ss.getSheetByName(sheetname);
  return sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
}


function getHeaderRow_(ss, sheetname) {
  var sh = ss.getSheetByName(sheetname);
  return sh.getRange(1, 1, 1, sh.getLastColumn()).getValues()[0];  
} 


//update function
function update_value(request, sheet) {
  var output  = ContentService.createTextOutput();
  var id = request.parameter.id;
  var flag = 0;
  var country = request.parameter.name;
  var lr = sheet.getLastRow();
  for (var i = 1; i <= lr; i++) {
    var rid = sheet.getRange(i, 2).getValue();
    if (rid == id) {
      sheet.getRange(i, 3).setValue(country);
      var result = "value updated successfully";
      flag = 1;
    }
  }
  if (flag == 0)
    var result="id not found";
  result = JSON.stringify({
    "result": result
  });  

  return ContentService
    .createTextOutput(request.parameter.callback + "(" + result + ")")
    .setMimeType(ContentService.MimeType.JAVASCRIPT);
}

function delete_value(request,sheet) {
  var output = ContentService.createTextOutput();
  var id = request.parameter.id;
  var country = request.parameter.name;
  var flag = 0;

  var lr = sheet.getLastRow();
  for (var i = 1; i <= lr; i++) {
    var rid = sheet.getRange(i, 2).getValue();
    if (rid == id) {
      sheet.deleteRow(i);
      var result = "value deleted successfully";
      flag = 1;
    }
  }

  if(flag==0)
    var result="id not found";
  result = JSON.stringify({
    "result": result
  });  

  return ContentService
    .createTextOutput(request.parameter.callback + "(" + result + ")")
    .setMimeType(ContentService.MimeType.JAVASCRIPT);
}

Секция HTML-скрипта

<script>
  var script_url = "apps script webapp url";

  // Make an AJAX call to Google Script
  function insert_value() {
    $("#re").css("visibility","hidden");
    document.getElementById("loader").style.visibility = "visible";
    $('#mySpinner').addClass('spinner');

    var id1 = $("#id").val();
    var name = $("#name").val();
    var url = script_url + "?callback=ctrlq&name=" + name + "&id=" + id1 + "&action=insert";
    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
      method: "GET",
      dataType: "jsonp"
    });
  }

  function update_value(){
    $("#re").css("visibility","hidden");
    document.getElementById("loader").style.visibility = "visible";

    var id1 = $("#id").val();
    var name = $("#name").val();
    var url = script_url + "?callback=ctrlq&name=" + name + "&id=" + id1 + "&action=update";
    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
      method: "GET",
      dataType: "jsonp"
    });
  }

  function delete_value(){
    $("#re").css("visibility","hidden");
    document.getElementById("loader").style.visibility = "visible";
    $('#mySpinner').addClass('spinner');

    var id1 = $("#id").val();
    var name = $("#name").val();
    var url = script_url + "?callback=ctrlq&name=" + name + "&id=" + id1 + "&action=delete";
    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
      method: "GET",
      dataType: "jsonp"
    });
  }


  // print the returned data
  function ctrlq(e) {
    $("#re").html(e.result);
    $("#re").css("visibility","visible");
    read_value();
  }

  function read_value() {
    // Other code here to process the result
  }

</script>

Вызовы функций HTML:

<body>
<div align="center">
<h1>Operations .</h1> 
<p>This is simple application<p>

<form >
ID
<input type = "text" name ="id" id="id">
Name
<input type = "text" name ="name" id="name">

</form>

<div id="loader"></div>

<p id="re"></p>

<input type = "button"  id = "b1" onClick="insert_value()" value = "Insert"></input>
<input type="button" onclick="read_value()" value="Read" />
<input type="button" onclick="update_value()" value="Update" />
<input type="button" onclick="delete_value()" value="Delete" />
<div id="showData"></div>
</div>
</body>
<div align="center">
</div>
<html>

Должна отображаться веб-страница для выполнения операции, показанная на веб-странице снимка экрана:

1 Ответ

0 голосов
/ 24 декабря 2018

Ошибка правильная - подумайте, что происходит, если для функции веб-приложения не заданы параметры doGet.Этот сценарий происходит, когда веб-приложение посещается через браузер.Чтобы устранить эту ошибку, вы должны вернуть что-то:

function doGet(e) {
  console.log({event: e});
  ...
  if (op)
    return ContentService.createTextOutput("Unsupported operation");
  else
    return HtmlService.createHtmlOutputFromFile(...);
  }
}

Ответ по умолчанию будет зависеть от того, как используется ваше веб-приложение - если вы намерены использовать веб-приложение только в качестве грубого бэкэнда или если вы планируетепусть он также размещает веб-интерфейс.

Если веб-приложение также должно размещать интерфейс, ваш HTML-код должен использовать встроенную связь клиент-сервер (google.script.run...), а не jQuery.ajax.Ознакомьтесь с документацией Apps Script подробно.Этот шаблон позволит вам сообщать и даже обрабатывать ошибки при выполнении кода вашего сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...