【问题标题】:callback handler for server side datatables v 1.10服务器端数据表的回调处理程序 v 1.10
【发布时间】:2014-11-25 18:15:21
【问题描述】:

我正在使用数据表版本 1.10.0 来提供搜索功能。

我想知道服务器端处理如何操作响应。 例如,我有一个 json 响应,它返回要显示的记录和状态。

我的要求是,如果服务器端验证失败,我不想绘制表格,而是在屏幕上呈现错误消息。否则绘制表格。

下面的简单示例:

 $('#result').dataTable( {
        "processing": true,
        "serverSide": true,

        "ajax": {
            "url": "search",
            "type": "POST",
            //"dataSrc": "resultList",
            "dataSrc": function ( json ) {
        if (json.responseStatus.value == 'Validation Failure') {
    //show error messages on screen
//prevent redraw
         } else {

    //draw the table with the  resultList
    }
              }
        "columns": [
                    { "data": "referenceNumber"},
                    { "data": "fileName" },
                    { "data": "documentType" },
                    { "data": "uploadType" },
                    { "data": "createdBy" },
                    { "data": "memberName" },
                    { "data": "dateOfBirthStr"},
                    { "data": "createdDateStr" },
                    { "data": "comment" },
                    { "data": "status" }
                ]
    } );

更新: 在服务器端我返回 403:

return new ResponseEntity(searchUploadResponse, HttpStatus.FORBIDDEN);

在客户端:

$('#result').dataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": {
        "url": "search",
        "type": "POST",
        "dataSrc": "resultList",
                 error: function (jqXHR, textStatus, errorThrown) {
                       //handle errorThrown in here
                     alert("error" + jqXHR  + " : " + textStatus + " : " + errorThrown);
                 }
    } ,

结果是我可以显示我的错误消息。 datatables 使用“处理” div 阻止对表的访问。

【问题讨论】:

    标签: jquery datatable


    【解决方案1】:

    我会在 json 文件上返回一个不同的状态代码,而不是 200 Success 状态,这样数据表就不会加载任何数据。

    然后,我可以使用.ajaxError() 捕获错误代码,并在该错误代码出现时执行我想做的事情。

    例如,您可以返回503 代码状态,然后在与数据表相同的页面上,您可以执行以下操作:

    $("#result").ajaxError(function(event, jqxhr, request, settings){
       if(jqxhr.status == 503) alert("Validation Failure");    
    });
    

    因此您可以处理该事件,因为如果数据表没有从服务器获得 200 状态代码响应,它只会空白。

    【讨论】:

    • 感谢您的回复。我想在响应状态而不是 http 状态代码上有我的条件。原因是,我的 webapp 需要支持 IE8+。如果我返回 200 以外的状态码,浏览器可能会覆盖我的更改。
    • 如果这是您所要求的,您还可以获得响应状态文本,这都暴露在 jqxhr 对象中。见这里:api.jquery.com/jQuery.ajax/#jqXHR
    • 另外,如果您将返回200 状态,您将需要使用$.ajaxSuccess() 而不是$.ajaxError(),用法与我回复中的示例相同。见这里:api.jquery.com/ajaxSuccess
    • 我可以得到响应状态值。它是我想要解决的条件中的逻辑。我想控制何时允许数据表重绘/刷新表格。
    • 返回正确的 http 状态码并使用错误回调是一个有效的解决方案。我仍然希望以我的方式处理它
    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多