如何更改此代码在 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: Me
和Who has access to the app: Anyone
(使用新的 IDE)。请注意这一点。
此修改后的 scrupt 假设您的 Google Apps 脚本工作正常。请注意这一点。
参考:
所以我有这个 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: Me
和Who has access to the app: Anyone
(使用新的 IDE)。请注意这一点。此修改后的 scrupt 假设您的 Google Apps 脚本工作正常。请注意这一点。