使用ajax加载jQuery DataTable

时间:2011-10-02 21:43:16

标签: 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/"} );

使用Chrome,我可以看到对/contact/company_name/的调用正在发生,返回状态200,并且包含以下数据:[[[Hello], [Goodbye], [Test1], [Test2]]](这是我的测试数据)。

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

我认为我的返回数据格式不正确。有谁能建议解决方案?

2 个答案:

答案 0 :(得分:12)

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

{
  "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"
    ]
  ]
}

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

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

答案 1 :(得分:6)

如果您的ajax来源返回

[[[Hello], [Goodbye], [Test1], [Test2]]]

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

{
     iTotalRecords: "54",
     iTotalDisplayRecords: "22",
     aaData: "[['Hello', 'Goodbye', 'Test1', 'Test2']]"
}

aaData代表数组数组。