2014-11-06 83 views
1

我想用成功回调使用DataTables。因为我想给用户一个警告,如果他们输入的创建DataTable的值有错误。DataTables成功回调替代

不幸的是,DataTables需要自己成功回调,因此我不能重载它。

目前的代码是:

configurationBlockChart = $('#blockSearchTable').DataTable(
{ 
    processing: true, 
    serverSide: true, 
    stateSave: true, 
    bDestroy: true, 
    ajax: 
    { 
     type: 'GET', 
     url:"ajax_retreiveServerSideBlockNames/", 
     data: 
     { 
      'csrfmiddlewaretoken':csrftoken, 
      'username':username 
     } 
    }, 
    rowCallback: function(row, data) 
    { 
     if ($.inArray(data.DT_RowId, blockSelected)!== -1) 
     { 
      $(row).addClass('selected'); 
     } 
    }, 
}); 

受此阿贾克斯返回获取的数据行的数据。

然而,返回的数据可能已经无效的响应,没有行返回

我试图rowCallBack之前添加成功:

success: function(response) 
{ 
    if(response.status == "invalid") 
      //then inform user 
} 

还试图用fnDrawCallBack

fnDrawCallback: function(settings, response) 
{ 
    console.log("Hello World!"); 
    if(response.status == "invalid") 
    { 
     $('#invalid').modal("show"); 
     $('#usernameSearch').modal("show"); 
    } 
} 

但是,只有在返回行时fnDrawCallBack才会被调用。

问题是,有时候没有行被返回,并且javascript代码给出了一个异常。

但是,我可以做一个尝试,但我仍然想让我的服务器将json状态提供给javascript代码。

编辑:使用xhr,它可以捕获无效响应,同时不会干扰ajax的成功功能。

$('#chartSearchUsername').click(function(event) 
{ 
    $('#chartConfigModal').modal("hide"); 
    $('#usernameSearch').modal("show"); 

    configurationUserChart = $('#userSearchTable').DataTable(
    { 
     processing: true, 
     serverSide: true, 
     stateSave: true, 
     bDestroy: true, 
     ajax: 
     { 
      type: 'GET', 
      url:"ajax_retreiveServerSideUsernames/", 
      data: 
      { 
       'csrfmiddlewaretoken':csrftoken 
      }, 
     }, 
     rowCallback: function(row, data) 
     { 
      if ($.inArray(data.DT_RowId, userSelected)!== -1) 
      { 
       $(row).addClass('selected'); 
      } 
     }, 
    }) 
    .on('xhr.dt', function(e, settings, response) 
    { 
     if(response.status == "invalid") 
     { 
      $('#invalid').modal("show"); 
      $('#usernameSearch').modal("hide"); 
     } 
    }); 
}); 
+1

您是否尝试过移动的回调函数要对XHR事件执行? [参考这里](http://datatables.net/reference/api/ajax)。那么你可以先检查回来什么 – elzi 2014-11-06 23:38:02

+0

感谢您的回复!不,我没有尝试过,我会尽快查看参考。 – user1157751 2014-11-06 23:39:22

+0

@elzi谢谢! xhr完美无缺! – user1157751 2014-11-07 18:49:01

回答

1
$('#example').dataTable(); 

$('#example').on('xhr.dt', function() { 
    console.log('Ajax call finished'); 
}); 
+0

请为您的代码添加一些解释。 – kenorb 2015-07-27 14:32:17