【发布时间】:2019-05-24 00:48:42
【问题描述】:
我有以下代码:
code.gs:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('My Menu')
.addItem('Test', 'showTestForm')
.addToUi();
}
function showTestForm() {
var html = HtmlService.createHtmlOutputFromFile('TestForm');
SpreadsheetApp.getUi().showModalDialog(html, 'TEST');
}
function Test(formObject){
Logger.log("TEST")
var a = new Error( "Allready present "+ formObject);
a.error_code = 99;
Logger.log(JSON.stringify(a));
throw a;
}
TestForm.html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<base target="_top">
<script>
function onFailure(error) {
var keys = Object.keys(error);
alert(JSON.stringify(keys));
alert(JSON.stringify(error.message));
alert(JSON.stringify(error.error_code));
}
function onSuccess() {
alert("Success");
}
</script>
</head>
<body>
<input type="submit" value="Save" onclick="google.script.run.withFailureHandler(onFailure).withSuccessHandler(onSuccess).Test('1')" />
<input type="button" value="Close" onclick="google.script.host.close()" />
</body>
</html>
当我从菜单中打开 TestForm 并按“保存”时,我从 Logger 得到以下日志:
[18-12-24 23:08:24:765 PST] TEST
[18-12-24 23:08:24:766 PST] {"message":"Allready present 1","error_code":99}
所以我明白了,那个错误对象有属性'message'和'error_code'。但在浏览器中,我收到了以下警报:
["name"]
"Error: Allready present 1"
undefined
所以我明白了,接收到的错误对象只有一个空的(我已经检查过)属性“名称”。但是,如果我只是引用属性“消息,我在原始对象中得到了字符串(但不一样)。看起来那个对象没有“错误代码”。 怎么了?
【问题讨论】:
-
error.name 显示什么?也可以试试
alert(JSON.stringify(error['error_code'])); -
@TheMaster:分别为
""和undefined -
尝试像在 a = {message: message, statusCode: statusCode} 中那样传递常规对象字面量,而不是调用 Error 构造函数
-
错误对象是标准的内置对象。您不能只为其添加属性。只有名称和消息是有效的属性。但是您可以在消息中包含一个对象。
var a = new Error( JSON.stringify({msg:"Allready present "+ formObject,code:99})); -
解析它。
JSON.parse(error.message).msg或JSON.parse(error.message).Error.msg
标签: javascript forms google-apps-script web-applications