为 jquery datatables ajax 调用设置错误处理程序

Posted

技术标签:

【中文标题】为 jquery datatables ajax 调用设置错误处理程序【英文标题】:set an error handler for jquery datatables ajax call 【发布时间】:2015-03-18 23:04:32 【问题描述】:

我正在尝试在 ajax 调用中出现问题(即服务器不响应)时使用自定义错误处理程序,以便将新数据加载到我的数据表中。

$table.DataTable().ajax.url(ajaxURL).load();

默认情况下它会显示一个警报,我可以使用以下设置将其更改为引发 javascript 错误:

$.fn.dataTable.ext.errMode = 'throw';

但是有了这个,我只是在控制台中记录了一个错误,我不确定如何捕获抛出的错误,所以我仍然无法提供自己的错误处理程序。

文档中还列出了一个错误事件,但似乎没有被触发,因此以下内容永远不会发出警报。

$table.on( 'error', function ()  alert( 'error' ); );

到目前为止,我发现的所有其他内容都是针对遗留代码的,例如设置 fnServerData,我想避免进入。

1.10 API中有设置ajax错误回调的方法吗?

【问题讨论】:

由于ajax调用是异步的,可以绕过异常处理。该错误可能需要在他们的代码中捕获。你是对的,缺少错误处理程序是一个奇怪的遗漏。这就是我不使用 DataTables 的 ajax 方法的原因。我只是使用 jQuery 'ajax',它确实有成功和错误处理程序,并从头开始重新绘制表格。 【参考方案1】:

Datatables v1.10.5(2015 年 2 月 10 日发布)中添加了新的错误事件处理。

$.fn.dataTable.ext.errMode = function ( settings, helpPage, message )  
    console.log(message);
;

在此处查看文档:https://datatables.net/reference/event/errorhttps://cdn.datatables.net/1.10.5/

【讨论】:

谢谢。我更新到 1.10.6,现在可以显示自定义警报消息。 谢谢。我将此添加到我的主要主刀片中。每个页面都不需要数据表,所以我需要用这个 if($.fn.dataTable !== undefined) 包装它【参考方案2】:

或者在 ajax 中使用错误函数来记录错误

$('#table').DataTable(
        ajax: 
           dataType: "JSON",  
            type: "POST",
            url: url,
            data: [],
            async: true,
            error: function (xhr, error, code)
            
                console.log(xhr);
                console.log(code);
            
        ,...

【讨论】:

【参考方案3】:

将事件用作自定义error handler:

$(document).ready(function () 
    $('#myTable').on('error.dt', function (e, settings, techNote, message) 
        console.log('An error has been reported by DataTables: ', message);
    ).DataTable(
        "displayLength": 15,
        "ajax": 
          ....

【讨论】:

也不要忘记在事件前添加$.fn.dataTable.ext.errMode = 'none'; 以关闭默认错误警报【参考方案4】:

我正在使用 Datatables 1.10.19 + Bootstrap,并且提供的大多数解决方案(包括上面接受的解决方案)都不起作用。但是,我设法捕获如下错误:

 "ajax" : 
    "datatype" : "json",
    "contentType" : "application/json",
    "method" : "GET",
    "url" : $url,
    "data" :  x : y ,
    "dataSrc": function (data) 
      if (data.result == "OK")
        return data.yourObj;
      else
        // hide processing or any loading modal here
        // display error on page or something
        console.log("Error: " + parseResultData(data.resultData));
        data.yourObj = [] //since datatables will be checking for the object as array
        return data.yourObj;
                                 
     
  

【讨论】:

以上是关于为 jquery datatables ajax 调用设置错误处理程序的主要内容,如果未能解决你的问题,请参考以下文章

如何实现bootstrap jquery dataTable异步ajax刷新表格数据

当数据源是一个数组时,jQuery DataTables刷新网格

怎么使用ajax为 datatables 获取数据

在 DataTable Delete 操作中多次发送 Ajax 请求 - ASP.NET、JQuery、Ajax

Jquery Datatables Ajax方法单元格对齐

jquery datatables Ajax-Error / http://datatables.net/tn/7