Datatables 1.10.5 ajax错误处理程序 - 访问http状态代码

时间:2016-05-20 17:00:42

标签: ajax error-handling datatables http-status-codes

我使用Datatables 1.10.5并且我定义了ajax错误处理程序。当错误触发时我需要访问实际的http状态代码,以便我可以看到我的用户的会话时间是否已过期(HTTP 401)与后端是否有问题(例如HTTP) 500错误。现在,techNote总是7。

如何从ajax事务中获取难以捉摸的HTTP状态代码?我在下面试过,但它没有开火。

$("#example").ajaxError(function(event, jqxhr, request, settings){
    alert("Failure HTTP Code:"+jqxhr.status);    
});

$.fn.dataTable.ext.errMode = 'throw';
$('#example').on('error.dt', function(e, settings, techNote, message) {
   console.log( 'An error has been reported by DataTables: ', message);
});

没有我需要的信息,或者至少我没有在任何传递的变量中找到它。

2 个答案:

答案 0 :(得分:2)

处理xhr事件。发生Ajax错误时,第三个参数json将为null,第四个参数xhr将包含jQuery XHR个对象。您可以通过访问xhr.status属性来获取状态。

另见$.fn.dataTable.ext.errMode,可用于指示DataTables不显示警报。

答案 1 :(得分:1)

我已经能够通过使用函数覆盖更具体的DataTables ajaxError而无需覆盖全局jQuery $.fn.dataTable.ext.errMode来访问状态代码:

    $.fn.dataTable.ext.errMode = function (settings, tn, msg) {
      if (settings && settings.jqXHR && settings.jqXHR.status == 401) {
          window.location = window.location.origin + '/login';
          return
      }
      alert(msg) // Alert for all other error types; default DataTables behavior
    };

此示例显示了重定向登录401状态代码,但是,您可以对任何其他状态代码执行相同操作。

最后请注意,您可能希望利用DataTables statusCode选项进行特定于状态代码的处理,但如果您想绕过默认错误处理,则仍需要覆盖$.fn.dataTable.ext.errMode,因为它在任何事情之前执行你在statusCode

中定义