使用ajax加载jQuery DataTable

Lar*_*tig 9 jquery datatables

我正在尝试(并且失败)使用内置的ajax源参数加载jQuery DataTable.但是,数据表显示消息"正在加载...",其中应显示行.

这是我的数据表调用:

    $('#my-table').dataTable( 
             {bFilter: false,
              bInfo: false,
              bJQueryUI: true,
              bPaginate: false,
              bStateSave: false,
              bSort: false,
              aoColumns: [ {"sTitle" : "Date"}, 
                           {"sTitle" : "Our Co."}, 
                           {"sTitle" : "Their Co."}, 
                           {"sTitle" : "Note"} ], 
              sAjaxSource: "/contact/company_name/"} );
Run Code Online (Sandbox Code Playgroud)

使用Chrome,我可以看到正在进行的调用/contact/company_name/,返回状态200,并具有以下数据:( [[[Hello], [Goodbye], [Test1], [Test2]]]这是我的测试数据).

我还可以看到dataTables.min.js正在返回错误Uncaught TypeError: Cannot read property 'length' of undefined.

我假设我的返回数据格式不正确.有谁能建议解决方案?

San*_*der 12

根据网站, 您的服务应该以这种格式返回数据:

{
  "aaData": [
    [
      "row 1 col 1 data",
      "row 1 col 2 data",
      "row 1 col 3 data",
      "row 1 col 4 data"
    ],
    [
      "row 2 col 1 data",
      "row 2 col 2 data",
      "row 2 col 3 data",
      "row 2 col 4 data"
    ],
    [
      "row 3 col 1 data",
      "row 3 col 2 data",
      "row 3 col 3 data",
      "row 3 col 4 data"
    ],
    [
      "row 4 col 1 data",
      "row 4 col 2 data",
      "row 4 col 3 data",
      "row 4 col 4 data"
    ]
  ]
}
Run Code Online (Sandbox Code Playgroud)

所以,将数组包装在一个对象中,将数组命名为,aaData然后重试.或者你可以按照自己喜欢的方式命名,但是你需要sAjaxDataProp在datatables初始化中添加参数(比如你说它data你会这样命名:

$('#example').dataTable( {
    "bProcessing": true,
    "sAjaxSource": "/ajaxsource/callmydata",
    "sAjaxDataProp": "data"
} );
Run Code Online (Sandbox Code Playgroud)


Nic*_*tti 6

如果您的ajax源返回

[[[Hello], [Goodbye], [Test1], [Test2]]]
Run Code Online (Sandbox Code Playgroud)

这对于数据表来说并不合适.它应该是:

{
     iTotalRecords: "54",
     iTotalDisplayRecords: "22",
     aaData: "[['Hello', 'Goodbye', 'Test1', 'Test2']]"
}
Run Code Online (Sandbox Code Playgroud)

aaData代表数组数组.