【问题标题】:jQuery, DataTables, ajax error handling: get rid of "Processing" messagejQuery、DataTables、ajax 错误处理:摆脱“正在处理”消息
【发布时间】:2015-10-14 03:53:43
【问题描述】:

我在一个小项目中使用 jQuery DataTables、ajax 和 Bootstrap。它大部分都在工作,我正在测试错误状态。我已经为 DataTables 表设置了我的 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 初始化中,我设置了 ajax 调用并指定了一个 error 回调函数。这“有效”是因为我可以在服务器端 ajax 代码中强制出错并触发回调。返回的错误我可以随意处理。

我的问题是,当 ajax 调用开始时,表体被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>");
    }
}

我有一个保存 DataTables 表定义的“全局”变量。它是在 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 消息?

【问题讨论】:

    标签: jquery ajax datatable


    【解决方案1】:

    显示处理消息的元素获取 id &lt;idOfTable&gt;_processing,因此您可以使用以下方法隐藏它:

    $('#resultTable_processing').hide();
    

    这可能已经改变,id 可能不同,但概念不变,您只需找出如何识别元素并将其隐藏即可。如果需要,DataTables 会再次显示。

    另外,您是否希望在其他场合显示处理消息?因为您可以通过在 DataTable 的选项上使用 processing: false 使其永远不会出现(或者根本不设置它,因为默认行为是不显示它)。

    【讨论】:

    • 嗯,我认为会有一个我丢失的 API 调用。我确实看到了命名的处理 div,但隐藏它似乎有点 hacky。我并不是说这不是答案,只是当有所有其他 API 功能时感觉不优雅。但是,它有效,谢谢您
    • 这有点老套,但alternative 没有任何好处,它是一个插件。 Here 您可以阅读关于它为何保持打开状态的说明。
    • 这适用于 DataTables 1.10.11。元素 id 仍然由[table-name]_processing 组成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    相关资源
    最近更新 更多