javascript - 显示来自 AJAX 调用的有意义的错误消息时出现问题
问题描述
我正在从 AJAX 调用 Razor Pages 处理程序,如下所示:
$.ajax({
url: '?handler=Delete',
data: {
id: $(this).data('id')
}
})
.fail(function (e) {
alert(e.responseText);
});
这是我的处理程序,用于测试发生异常时会发生什么:
public async System.Threading.Tasks.Task OnGetDelete(int id)
{
throw new Exception("This is an exception.");
}
如果在我的处理程序中抛出异常,那么我想显示错误的描述。问题是它e.responseText
包含的信息比我想向用户显示的要多。它包括对异常的描述,以及堆栈跟踪、标头和许多其他内容。
在上面的示例中,我只想显示“这是一个例外。”。是我尝试解析消息的唯一解决方案e.responseText
吗?这是其他人正在做的吗?
解决方案
在上面的示例中,我只想显示“这是一个例外。”。
要显示“这是一个异常。”,您可以使用以下代码段:
.fail(function (e) {
//console.log(e);
var mes = e.responseText.split('\n')[0];
alert(mes.substring(17, mes.length - 1));
})
测试结果:
更新:
如果可能,您可以尝试动态捕获该特定处理程序方法中发生的异常,然后生成您预期的响应,如下所示。
app.Use(async (context, next) =>
{
try
{
await next();
}
catch (Exception ex)
{
if (context.Request.Path.StartsWithSegments("{request_path_here}") && context.Request.Query["handler"].Any())
{
if (context.Request.Query["handler"]== "Delete")
{
context.Response.StatusCode = 500;
var result = System.Text.Json.JsonSerializer.Serialize(new { error = ex.Message });
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(result);
}
}
}
});
将responseText
是"{"error":"This is an exception."}"
,您可以使用JSON.parse(e.responseText).error
.
测试结果:
推荐阅读
- spring - 使用 Spring R2DBC 存储库时,我可以提供自己的自定义 R2dbcEntityTemplate 吗?
- javascript - 'React' 指的是一个 UMD 全局,但当前文件是一个模块
- ms-access - 有没有办法让 Access 通过查询成为 SQL 服务器初始登录的一部分?
- django - Django - 如何使用 ForeignKey 的存在作为条件来设置模型的字段?
- gitlab - 我们可以从 Gitlab CI 获取消息吗?
- node.js - Node.js 将字符串加密为字母数字
- python - 用于切片 DataFrame 的布尔值列表
- python - 当我用 f.write 写入 txt 文件中的 Python 向上箭头
- neo4j - 我可以在 APOC.export 中指定我自己的标识符 ID 作为关系 ID 吗?
- html - Angular mat-error 不弹出,隐藏(包括图片)