jQuery Datatables Server侧面分页自定义HTTP POST请求和响应

时间:2014-04-16 12:59:53

标签: javascript datatables

过去两天我一直处理过一个问题。 我在一个页面中使用jQuery和DataTables,它从服务器获取数据并非常愉快地填充表格。 我需要对来自dataTables库的请求进行更改以从服务器获取数据。

是否有可能在下面的链接中提出没有定义参数列表的jquery ajax post请求?

https://datatables.net/usage/server-side

这是我的json POST请求:

{"page_number":1,"page_size":10}

这是我的服务器响应:

{
 "status": 200,
 "message": "Users retrieved successfully.",
  "users": [Assumelistofusers],
  "total_count": 50,
  "total_page_count": 5
}

我发现,在YUI Library for DataTable Control(beta)中,有一个很好的服务器端分页示例。 参考链接:

http://examples.mashupguide.net/lib/yui_2.3.0/examples/datatable/dt_serverpagination.html

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要这样做,因为如果你因为某些原因明确排除那些参数,你将会失去所有的过滤和排序。

但是,是的,您可以使用fnServerData函数为服务器端数据源定义自己的调用和方法。

$('#dt').dataTable({
"bServerSide": true,
"sAjaxSource": "my_serverdata.script",
"fnServerData": function(sSource, aoData, fnCallback, oSettings) {
  var mydata=[]
  mydata.push( { "name": "page_number", "value": 1 } );
  mydata.push( { "name": "page_size", "value": 10 } );
   //here comes a basic jQuery helper function to handle your ajax call.
   //of course you can replace it with any other ajax handler
   //has nothing to do with dataTables
   $.ajax({
    "dataType": 'json',
    "type": "POST",
    "url": sSource,
    "data": mydata,
    "success": fnCallback
  });
}
});

此处通常的aoData完全被自定义数组mydata覆盖。这将发布到您的服务器:

 page_number    1
 page_size  10

现在您只需要为成功处理程序编写一个函数,该函数将服务器响应映射到预期变量(iTotalRecords = total_countaaData = users等),然后调用fnCallback来处理所有内容。

当然,这需要一些摆弄,以找出如何填写预期的服务器响应。但这应该有用。

由于ajax,我无法生产小提琴或者弹药。

请注意,只有在您无法更改服务器端脚本时,这才有意义。另请注意,以同样的方式创建新的数组mydata,您还可以将额外的帖子数据推送到aoData,并忽略服务器端的其他参数。

BTW:返回total_page_count有点无用,因为这可以很容易地在客户端计算。