如何在Jquery数据表中处理Ajax 401(未经授权的访问错误)?

时间:2014-07-21 09:05:23

标签: jquery ajax error-handling datatable server-side

我正在使用如下数据表:

    $('#resources_table').dataTable({
    "processing": true,
    "serverSide": true,
    "columns": [
        { "data": "id" },
        { "data": "column1" },
        { "data": "column2" }
    ],
    "ajax": "/resource",
    "error": function(reason) {
        console.log("error encountered ! ");
        // process reason here to know the type of the error
        // and then take appropriate action
    }
});

不知怎的,我无法捕获从服务器返回的错误。如何在服务器端访问基于ajax的数据表中访问reason和进程error

PS:我使用的是最新的dataTable版本:DataTables 1.10.1

2 个答案:

答案 0 :(得分:7)

找到它。实际上,“ajax”采用3种类型的值中的一种:stringobjectfunction

可以使用对象为ajax请求指定相应的选项,如下面的一个简单示例所示:

$('#resources_table').dataTable({
    "processing": true,
    "serverSide": true,
    "columns": [
        { "data": "id" },
        { "data": "column1" },
        { "data": "column2" }
    ],
    "ajax": {
        "type": "GET",
        "url" :"/resources",
        // error callback to handle error
        "error": function(reason) {
            console.log("Error occurred !");
            // parse "reason" here and take appropriate action
        }
    }
});

答案 1 :(得分:1)

我遇到了同样的问题,并希望保留所有错误的默认DataTables错误处理,除了 401错误。我最终使用DataTables statusCode混合用于状态特定处理程序,并覆盖$.fn.dataTable.ext.errMode以消除alert我特意处理的错误。我没有具体处理就保留了所有其他错误的警报:

    $.fn.dataTable.ext.errMode = function (settings, tn, msg) {
      if (settings && settings.jqXHR && settings.jqXHR.status == 401) {
          return; // Status code specific error handler will take care of this
      }
      alert(msg) // Alert for all other error types
    };
    $('#example').DataTable({
      "ajax": {
        "url": '/some/endpoint',
        "dataSrc": 0,
        "statusCode": {
          401: function (xhr, error, thrown) {
            window.location = window.location.origin + '/login/?next=' + window.location.pathname;
            return false
          }
        }
      },
    });