【问题标题】:Custom Error Message after Datatables ajax exceptionDatatables ajax 异常后的自定义错误消息
【发布时间】:2016-12-17 14:22:03
【问题描述】:

我正在使用数据表 1.10.12 显示数据表。用户可以指定导致服务器出错的输入参数。应向用户显示适当的错误消息,以便他们可以修改其设置,但唯一的错误选项似乎是:

  1. 在警报中显示以下一般错误:“DataTables 警告:table id=trackingTable - Ajax 错误。有关此错误的详细信息,请参阅http://datatables.net/tn/7
  2. 在浏览器控制台中显示一般错误
  3. 修改服务器以不返回任何行,即静默失败。

有人知道如何在数据表 ajax 请求失败后显示自定义错误吗?

以下代码示例取自数据表documentation。 Datatables 处理 ajax 调用并处理成功和错误。

$(document).ready(function() {
    $('#example').DataTable( {
        "ajax": '../ajax/data/arrays.txt'
    } );
} );

我可以添加到列表中的第四个选项是修改数据表源代码以自己处理错误响应。我不是那么热衷。

这个问题是在 2015 年提出的,但没有得到答案。看: display server side exception

【问题讨论】:

  • 谢谢mmushtaq。如何将 try catch 添加到数据表 ajax 请求中?
  • 这很好。谢谢@亚当。但是我看不到如何访问 ajax 调用返回的错误消息或状态。

标签: ajax exception datatables


【解决方案1】:

如果将对象传递给 ajax 属性,则可以覆盖 jQuery.ajax() 错误方法:

$(document).ready(function () {
    $('#example').DataTable({
        ajax: {
            url: '../ajax/data/arrays.txt',
            error: function (jqXHR, textStatus, errorThrown) {
                // Do something here
            }
        }
    });
});

https://datatables.net/reference/option/ajax#object

这将停止alert 框中的标准错误消息。

请注意,不建议重写 jQuery.ajax() 的 success 方法,因为它被 DataTables 使用。

【讨论】:

    【解决方案2】:

    您可以像下面的示例一样全局实现自己的自定义错误消息。

    $(document).ready(function() {
            $.fn.dataTable.ext.errMode = () => alert('Error while loading the table data. Please refresh');
            $('#example').DataTable( {
                "ajax": '../ajax/data/arrays.txt'
            });
        });
    

    【讨论】:

      【解决方案3】:

      回答以防万一有人仍在寻找解决方案。

      就我而言,我做了以下

      1. 在服务器端设置DataTablesOutputobject.setError("ErrorMsg")
      2. 在我的js方法$.fn.dataTable.ext.errMode = 'none';中避免错误popup
      3. 在我的页面中创建了错误div 以显示自定义错误消息
      4. 在我的 js 方法中添加以下内容来处理错误

        $('#myDataTable')
                .on('error.dt',
                    function(e, settings, techNote, message) {//Logic to set the div innertext 
                     }
        

      【讨论】:

        【解决方案4】:
             try {
             $.ajax({
               -------
               -------
            success: function (data){
                 //ShowDataTable is a js Function which takes ajax response data and display it.
                   ShowDataTable(data);
            },
              //this error will catch server-side error if request fails
              error: function (xhr, textStatus, errorThrown) {
                 alert(errorThrown);
                 ShowDataTable(null);
               } 
              })
        
             }
            //this catch block will catch javascript exceptions,
            catch (Error) {
                        if (typeof console != "undefined") {
                            console.log(Error);
                            ShowDataTable(null);                    
                            alert(Error);
                         }
                      }
        

        编辑

        如果您愿意接受错误(例如,如果您无法更改后端系统来修复错误),但不希望最终用户看到 alert() 消息,您可以更改 DataTables 的错误报告向浏览器控制台抛出 Javascript 错误而不是警告它的机制。这可以使用:

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

        【讨论】:

        • 我不认为这是一个解决方案。 DataTables link 自己处理 ajax 调用。我已经更新了问题以澄清这一点。
        • 从好的方面来说,我今天花了相当多的时间添加代码以防止用户首先设置无效请求。然而,似乎希望能够显示由服务器端故障导致的有意义的错误消息,因此我认为 Datatables 必须能够做到这一点。
        • 你提到的Errorajax request的失效。 .只需在Document.Ready() 中添加try catch 即可捕获JS exceptionsDataTable Error link 中提供了另一个解决方案。请参阅我的编辑
        猜你喜欢
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-26
        • 2014-04-15
        • 2015-11-04
        • 2012-01-17
        • 1970-01-01
        相关资源
        最近更新 更多