如何更改此代码在 try catch 块中的处理方式?

How can I change how this code is being handled in a try catch block?

所以我有这个 HTML 表单,它接受用户输入并将其发送到 Google Sheet。这是通过以下 JavaScript 代码完成的:

const sheetName = 'Sheet1'
const scriptProp = PropertiesService.getScriptProperties()

function initialSetup () {
  const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  scriptProp.setProperty('key', activeSpreadsheet.getId())
}

function doPost (e) {
  const lock = LockService.getScriptLock()
  lock.tryLock(10000)

  try {
    const doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
    const sheet = doc.getSheetByName(sheetName)

    const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
    const nextRow = sheet.getLastRow() + 1

    const newRow = headers.map(function(header) {
      return header === 'Date' ? new Date() : e.parameter[header]
    })

    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])

    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  finally {
    lock.releaseLock()
  }
}

当用户提交表单时,会转到一个新的 link,显示以下内容:

如果出现错误,他们也会被带到一个新的 link 并显示类似的消息,显示如下:

{ 'result': 'error', 'error': e }

如何更改代码的内容以简单地显示 JavaScrip 警报,例如: alert('Data has been sent!')alert('Oops. An error occurred...').

我假设这将发生在:

    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
      .setMimeType(ContentService.MimeType.JSON)

并且:

  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON)
  }

HTML 表格:

    <form 
  method="POST" 
  action="https://script.google.com/macros/s/AKfycby_xq-vLOZD0cXzN0vvvNYG40GK5yde0HYQD9IUq3FGGTcDggk3kG9QkmtBFSg037Le/exec"
>
  <input name="Job" type="text" placeholder="Job" required>
  <input name="Name" type="text" placeholder="Name" required>
  <button type="submit">Send</button>
</form>

示例警报:

如果问题的措辞有误,我们深表歉意。

let text = "Type what you want";
return ContentService
      .createTextOutput(JSON.stringify({"message":text}));
      .setMimeType(ContentService.MimeType.JSON)

我相信你的现状和目标如下。

  • 根据您对 the HTML form is located in a separate Visual Studio Code file. The JavaScript code in my post is located in the Apps Script online editor. 的回复,我了解到您的 HTML 已从 Google Apps 脚本项目中删除。

  • 您想将 HTML 表单中的值提交到您的 Web 应用程序。

  • 将值发送到 Web 应用程序后,您想在客户端打开警报。

这样的话,下面的修改怎么样?

修改后的脚本:

本次修改,你的HTML修改如下。在使用此脚本之前,请将您的 Web 应用程序 URL 设置为 url。在这种情况下,您的 Google Apps 脚本不需要修改。

<form>
  <input name="Job" type="text" placeholder="Job" required>
  <input name="Name" type="text" placeholder="Name" required>
  <button type="submit" onclick="sample(this);return false;">Send</button>
</form>

<script>
  function sample(e) {

    const url = "https://script.google.com/macros/s/###/exec"; // Please set your Web Apps URL.

    const obj = [...e.parentNode].reduce((o, f) => (o[f.name] = f.value, o), {});
    const query = new URLSearchParams(obj); 
    fetch(url + "?" + query, { method: "POST" })
      .then((res) => res.json())
      .then((res) => {
        console.log(res);
        alert(res.result);
      });
  }
</script>
  • 在此修改中,提交表单时,使用 fetch 将值发送到 Web 应用程序。并且,在发送值后,检索返回值并打开警报。

注:

  • 虽然你的问题中没有包含Web Apps的设置,但是从你的HTML来看,我猜Web Apps的设置是Execute as: MeWho has access to the app: Anyone(使用新的 IDE)。请注意这一点。

  • 此修改后的 scrupt 假设您的 Google Apps 脚本工作正常。请注意这一点。

参考: