【问题标题】:The script completed but the returned value is not a supported return type脚本已完成,但返回的值不是受支持的返回类型
【发布时间】:2016-05-22 19:03:52
【问题描述】:

我正在尝试从 Google Script 获得响应。但它给了我一个错误:脚本已完成,但返回的值不是受支持的返回类型。

这是一些脚本代码:

function doGet(e) {

  var result = 'ERROR PASSWORD';

  if (Pass(e)) {
    result = ParseRequest(e);
  }

  return ContentService.createTextOutput(result);
}


function ParseRequest(e) {
  var result;

  if (!CheckOrAddData(e)) {
    result = 'FAILED';
  } else {
    result = 'ACTIVATED PROMOCODE';
  }

  return result;
}



function Pass(e) {
  var ss = SpreadsheetApp.openById(e.parameters.ssid);
  var sheet = ss.getSheetByName('PASS');
  var sheetPass = sheet.getDataRange().getValue();

  if (e.parameters.pass == sheetPass)
    return true;
  else
    return false;
}


function CheckOrAddData(e) {

  var promoCode = e.parameters.promocode;
  var nickName = e.parameters.username;
  var ss = SpreadsheetApp.openById(e.parameters.ssid);

  var sheet = ss.getSheetByName('DATA');

  if (nickName == "") {
    return false;
  }

  var range = sheet.getRange('A1:B');
  var rows = range.getNumRows();
  var values = range.getDisplayValues();

  for (var i = 0; i < rows; i++) {
    if (values[i][0] == promoCode) {
      if (values[i][1] == 'NO') {
        var cell = range.getCell(i + 1, 2);
        cell.setValue(nickName);
        return true;
      }

      if (values[i][1] == nickName) {
        return true;
      }
    }
  }
  return false;
}

我从Hurl.it得到的回复:

<!DOCTYPE html>
<html>
  <head>
    <link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico">
      <title>Error</title>
      <style type="text/css">body {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}</style>
    </head>
    <body>
      <div>
        <img src="//ssl.gstatic.com/docs/script/images/logo.png">
        </div>
        <center>The script completed but the returned value is not a supported return type.</center>
      </body>
    </html>

【问题讨论】:

  • 我没有看到名为 Pass() 的函数。从这一行开始:if (Pass(e)) 如果出现服务器错误,您可能需要添加 try/catch 块以返回默认值。
  • 已编辑 GS 代码,但仍无法在编辑器之外工作。 (调试时工作正常)。返回默认值 - 不是很好的解决方案(所以它成功编辑了电子表格,但没有返回值。
  • 尝试在 newResults 上排除 getContent()
  • 没有 getContent() 它将返回对象类型。

标签: javascript html google-apps-script google-sheets google-spreadsheet-api


【解决方案1】:

您的函数doGet 正在尝试返回newResult.getContent(),它是一个字符串。但是doGet 不允许返回字符串。它必须返回一个可接受类的对象:HtmlOutput(使用 HtmlService 创建)或TextOutput(使用 ContentService 创建)。

所以,应该是return newResult; 而不是return newResult.getContent();

【讨论】:

  • 将 doGet() 更改为:pastebin.com/LtcV94bU 但它仍然无法正常工作 (((
  • "不工作"...你知道你可以收到脚本失败的即时电子邮件通知吗?此外,还有对函数 CheckOrAddData 的引用,而您尚未发布该函数。
  • 更新了谷歌脚本。 TextOutput 和 HtmlOutput 都不起作用。我的电子邮件中没有任何通知。对不起,我真的不知道问题出在哪里
  • 我正在返回字符串值,但它仍然给出同样的错误
【解决方案2】:

我使我的 doGet() 函数异步(没有考虑太多),然后花了一个小时试图修复这个错误“脚本已完成,但返回的值不是受支持的返回类型。”

async function doGet(event) {...}

显然,不支持返回 Promise。不要让这个函数异步,希望它能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2021-08-05
    • 1970-01-01
    • 2018-03-29
    • 2017-08-10
    相关资源
    最近更新 更多