为 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刷新网格