jQuery、DataTables、ajax 错误处理:去掉 "Processing" 消息
jQuery, DataTables, ajax error handling: get rid of "Processing" message
我在一个小项目中使用 jQuery DataTables、ajax 和 Bootstrap。它主要工作,我正在测试错误状态。我已经为 DataTables table 设置了我的 html。 <table>
.
周围有一个 table-responsive
div
<div id="errorDiv"></div>
<div id="resultTableDiv" class="table-responsive">
<table id="resultTable" class="table table-striped table-bordered table-hover table-condensed" cellspacing="0">
<thead>
<tr>
<th>...</th>
...
</tr>
</thead>
<tfoot>
<tr>
<th>...</th>
...
</tr>
</tfoot>
</table>
</div>
</div>
在 DataTables init 中,我设置了 ajax 调用并指定了一个 error
回调函数。这个 "works" 因为我可以在服务器端 ajax 代码中强制出错并触发回调。我可以随意处理返回的错误。
我的问题是,当 ajax 调用开始时,table 正文是 "replaced" Processing
消息。这很好,除了当 ajax 通过回调报告错误时,处理消息仍然存在,我还没有弄清楚如何通过 DataTables 方法或 API 调用让它消失。
我的错误回调看起来像
function ajaxError(jqXHR, textStatus, errorThrown) {
var obj = jQuery.parseJSON(jqXHR.responseText);
if (obj && obj.Error) {
$('#errorDiv').html("<p>" + obj.Error + "</p>");
}
}
我有一个 "global" 变量,它保存 DataTables table 定义。在jQuery就绪函数中设置
var table;
$(function () {
$('#errorDiv').empty();
$('#resultTable').show();
table = $('#resultTable').DataTable({
paging: false,
processing: true,
autoWidth: false,
ordering: false,
ajax: {
url: "ions.cgi",
dataType: 'json',
dataSrc: "LIST",
error: ajaxError
}, ...
在错误回调中我尝试了以下所有方法:
table.clear().draw(); // does nothing
table.fnRedraw(); // says that function does not exist
在此错误状态下,应如何重置 Processing
消息?
显示处理消息的元素获得 id <idOfTable>_processing
,因此您可以使用以下方法隐藏它:
$('#resultTable_processing').hide();
这可能已经改变,并且 id 可能不同,但概念不变,您可以找出如何识别元素并将其隐藏。如果需要,DataTables 将再次显示它。
另外,您是否希望在其他场合显示正在处理的消息?因为您可以通过在 DataTable 的选项上使用 processing: false
使其永远不会出现(或者根本不设置它,因为不显示它是默认行为)。
我在一个小项目中使用 jQuery DataTables、ajax 和 Bootstrap。它主要工作,我正在测试错误状态。我已经为 DataTables table 设置了我的 html。 <table>
.
table-responsive
div
<div id="errorDiv"></div>
<div id="resultTableDiv" class="table-responsive">
<table id="resultTable" class="table table-striped table-bordered table-hover table-condensed" cellspacing="0">
<thead>
<tr>
<th>...</th>
...
</tr>
</thead>
<tfoot>
<tr>
<th>...</th>
...
</tr>
</tfoot>
</table>
</div>
</div>
在 DataTables init 中,我设置了 ajax 调用并指定了一个 error
回调函数。这个 "works" 因为我可以在服务器端 ajax 代码中强制出错并触发回调。我可以随意处理返回的错误。
我的问题是,当 ajax 调用开始时,table 正文是 "replaced" Processing
消息。这很好,除了当 ajax 通过回调报告错误时,处理消息仍然存在,我还没有弄清楚如何通过 DataTables 方法或 API 调用让它消失。
我的错误回调看起来像
function ajaxError(jqXHR, textStatus, errorThrown) {
var obj = jQuery.parseJSON(jqXHR.responseText);
if (obj && obj.Error) {
$('#errorDiv').html("<p>" + obj.Error + "</p>");
}
}
我有一个 "global" 变量,它保存 DataTables table 定义。在jQuery就绪函数中设置
var table;
$(function () {
$('#errorDiv').empty();
$('#resultTable').show();
table = $('#resultTable').DataTable({
paging: false,
processing: true,
autoWidth: false,
ordering: false,
ajax: {
url: "ions.cgi",
dataType: 'json',
dataSrc: "LIST",
error: ajaxError
}, ...
在错误回调中我尝试了以下所有方法:
table.clear().draw(); // does nothing
table.fnRedraw(); // says that function does not exist
在此错误状态下,应如何重置 Processing
消息?
显示处理消息的元素获得 id <idOfTable>_processing
,因此您可以使用以下方法隐藏它:
$('#resultTable_processing').hide();
这可能已经改变,并且 id 可能不同,但概念不变,您可以找出如何识别元素并将其隐藏。如果需要,DataTables 将再次显示它。
另外,您是否希望在其他场合显示正在处理的消息?因为您可以通过在 DataTable 的选项上使用 processing: false
使其永远不会出现(或者根本不设置它,因为不显示它是默认行为)。