如何使用fnServerData?

时间:2014-02-28 21:04:39

标签: jquery ajax jquery-datatables

有人可以告诉我如何使用fnServerData吗?

$(document).ready( function() {
  $('#example').dataTable( {
    "bProcessing": true,
    "bServerSide": true,
    "sAjaxSource": "xhr.php",
    "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
      oSettings.jqXHR = $.ajax( {
        "dataType": 'json',
        "type": "POST",
        "url": sSource,
        "data": aoData,
        "success": fnCallback
      } );
    }
  } );
} );

下面是我的Ajax调用,我想用fnServerData替换ajax call

   $.ajax({
        type: 'GET',
        url: url,
        jsonp: true,
        contentType: "application/json",
        dataType: 'jsonp',
        success: function (data) {
            $.each(data.value, function(i,item){
                table.fnAddData(item);
            });
        },
        error: function (e) {
            console.log(e.message);
        }
    });

http://datatables.net/ref#fnServerData

什么是sSource,fnCallback和oSettings?谁能告诉我如何使用fnServerData

3 个答案:

答案 0 :(得分:6)

sSource,fnCallback和oSettings由Datatables生成。

sSource是您的ajax调用的URL。初始化数据表时,请在sAjaxSource中指定它。所以你应该把你的url传递给sAjaxSource。

oSettings由datatables js创建和维护。它存储有关数据表状态的重要信息。此处提供详细文档: https://datatables.net/docs/DataTables/1.9.0/DataTable.models.oSettings.html

但我认为,你的成功功能是不必要的。您应该在初始化期间指定aoColumns作为选项,然后数据表将为您填充数据。

$(document).ready( function() {
 $('#example').dataTable( {
   "aoColumns": [
       { "mData": "engine" },
       { "mData": "browser" },
       { "mData": "platform.inner" },
       { "mData": "platform.details.0" },
       { "mData": "platform.details.1" }
     ]
   }),
   "bProcessing": true,
   "bServerSide": true,
   "sAjaxSource": url,
   "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
     oSettings.jqXHR = $.ajax( {
       "dataType": 'json',
       "type": "POST",
       "url": sSource,
       "data": aoData,
       "success": fnCallback,
       "error": function (e) {
           console.log(e.message);
       }
     });
   }
 });
});

有关aoColumns的更多信息,请访问:http://www.datatables.net/usage/columns 另外,请查看数据表页面上的示例。应该有你需要的任何例子: http://www.datatables.net/usage/columns

此致 SAZ


答案 1 :(得分:0)

如果要从客户端向服务器发送额外字段,可以向aoData对象添加属性,如下所示:

"fnServerData": function (sSource, aoData, fnCallback, oSettings) {
     aoData.push({ "name": "Input1", "value": "xx" });

     oSettings.jqXHR = $.ajax({
         "dataType": 'json',
         "type": "POST",
         "url": sSource,
         "data": aoData,
         "success": fnCallback
     });
},

答案 2 :(得分:0)

"fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {                               
    oSettings.jqXHR = $.post( sSource, aoData, function( data ) {               
        //alert(data.toSource());

        if ( ! parseInt(data.iTotalRecords) > 0 )
            alert('ZeroRecords');

        fnCallback(data);
        //fnCustomCallback(data);

    },'json');
}