如何在jQuery Ajax error回调中获取400错误返回的字符串内容
实现方法
完全可以在error回调中拿到400响应的内容,jQuery的ajax错误回调会暴露jqXHR对象,响应内容就存在该对象的属性中。另外你现有代码还有一处参数绑定的坑需要修复,否则请求会直接触发模型绑定错误,进不到你写的接口逻辑里。
1. 核心修改:error回调读取响应内容
$.ajax的error回调第一个参数就是jqXHR实例,你后端返回的纯字符串错误信息存在responseText属性上,直接读取即可:
error: function (jqXHR) { // 这里拿到的就是后端返回的"Failed to Approve version"字符串 const errorMsg = jqXHR.responseText; // 可直接用于错误提示 alertify.error(errorMsg); $('#datatable').DataTable().ajax.reload(); }
如果后续接口返回JSON格式的错误对象,直接取
jqXHR.responseJSON就能拿到解析完成的JavaScript对象,无需手动反序列化。
2. 修复请求参数绑定问题
你现有代码的请求传参方式和后端[FromBody] int id的参数要求不匹配,会直接触发ASP.NET Core的模型验证400错误,根本走不到你写的catch分支返回自定义错误,需要按如下方式修改ajax配置:
- 新增
contentType声明,指定请求体为JSON格式 - 把参数序列化为JSON字符串传递,注意
[FromBody]接收简单int类型时,直接传id值即可,不要包装成{id:id}的对象格式 - 修正原代码中错误的括号闭合位置
修改完成的完整ajax请求代码如下:
$.ajax({ type: 'POST', url: "@TempData["api"]api/Versioning/Approve", headers: { 'Authorization': 'Bearer @HttpContextAccessor.HttpContext.Session.GetString("token")' }, // 指定请求体格式为JSON contentType: 'application/json', // 序列化参数为JSON字符串传递 data: JSON.stringify(id), success: function () { alertify.set('notifier', 'position', 'top-center'); alertify.success('Successfully approved a Document version'); $('#datatable').DataTable().ajax.reload(); }, error: function (jqXHR) { const errorMsg = jqXHR.responseText; alertify.error(errorMsg); $('#datatable').DataTable().ajax.reload(); } })
内容的提问来源于stack exchange,提问作者codeninja
相关产品推荐
相关产品推荐

