为啥 jQuery dataTables 不能解析我的 JSON?

Posted

技术标签:

【中文标题】为啥 jQuery dataTables 不能解析我的 JSON?【英文标题】:Why can't jQuery dataTables parse my JSON?为什么 jQuery dataTables 不能解析我的 JSON? 【发布时间】:2012-10-02 14:15:06 【问题描述】:

我正在尝试如下填充dataTable:

$("#my-datatable").dataTable( 
    "sAjaxSource" : "/someURLOnMyServer",
    "bDestroy" : true,
    "fnServerParams" : function(serverParams) 
        serverParams.push(
            
                "name" : "widget",
                "value" : token
            
        );
    
);

以及它正在填充的 html 表格:

<table id="my-datatable">
    <thead>
        <tr>
            <th>Type</th>
            <th>Value</th>
            <th>ID</th>
            <th>Fizz</th>
            <th>Buzz</th>
        </tr>
    </thead>
    <tbody></tbody>
</table>

根据 Firebug,从服务器返回的 JSON 是:

[
   
      "id":1,
      "attributeType":
         "id":1,
         "name":"test1",
         "tag":"test-type",
         "is-dog":false
      ,
      "attributeValue":
         "id":null,
         "name":"blah",
         "tag":"BLAH"
      ,
      "buzz":1,
      "fizz":"53abc"
   
]

但 Firebug 在其控制台中抛出以下 javascript 错误:

TypeError: aData is undefined
[Break On This Error]   

for ( i=0 ; i<aData.length ; i++ ) --> jquery.dataTables.js (line 2541)

谁能发现哪里出了问题?要么我没有正确设置我的dataTable 对象,要么返回的 JSON 与它试图填充的 HTML 表的“模式”不匹配。不管怎样,我迷路了。提前致谢!

【问题讨论】:

对 jQuery dataTables 了解不多,但我想知道返回的 JSON 作为数组是否可能是问题所在。 【参考方案1】:

数据表需要特定格式的结果。如果您不使用该格式,则必须声明所有内容。

$('#my-datatable').dataTable( 

    "sAjaxSource": "/url/here",


    "fnServerData": function ( sSource, aoData, fnCallback ) 
            aoData.push(  "name": "widget", "value": "token"  );

            request = $.ajax(
              "dataType": 'json', 
              "type": "GET", 
              "url": sSource, 
              "data": aoData, 
              "success": fnCallback
            );
      ,


      "aoColumns": [
             "mDataProp": "id",
             "mDataProp": "fizz",
             "mDataProp": "name",
             "mDataProp": "tag",
             "mDataProp": "tag",
             "mDataProp": "attributeValue.name",
             "mDataProp": "attributeValue.tag",
        ],

    );

这是格式:http://datatables.net/release-datatables/examples/server_side/post.html

【讨论】:

再次感谢@Aktee (+1) - 但这让我更加困惑!什么是sSourceaoDatafnCallbackaoDatamDataProp它们来自哪里(它们在哪里声明)?我猜测您上面的代码 sn-p 只是我的代码必须是什么样子的抽象示例,但是,我没有足够的信息来举例说明适合我的问题。您发送给我的链接以及所有 dataTables 文档也是如此。有不错的演示和 sn-ps,但没有 工作,真实世界的实际示例。 没有示例很难,这里有一个与您的数据完全一致的示例。 maktouch.net/pnongrata @pnongrata,你有机会查看我托管的示例吗? @pnongrata 可以吗? 对不起@Aktee 我上周就出城了。我现在正在检查 - 感谢您迄今为止的帮助和后续行动【参考方案2】:

尝试用aaData 括起您的 JSON 对象,例如:

"aaData" : 

["id":1,"attributeType":"id":1,"name":"test1","tag":"test-type","is-dog":false,"attributeValue":"id":null,"name":"blah","tag":"BLAH","buzz":1,"fizz":"53abc"]


【讨论】:

以上是关于为啥 jQuery dataTables 不能解析我的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我没有必要的 jQuery DataTables 分页按钮?

当有填充的tbody时,为啥jQuery DataTable会显示“表中没有可用数据”

JQuery Datatable 请求数据解析 #yyds干货盘点#

如何从可以由 jQuery Datatables 插件解析的 CSV 格式化 json

为啥数据表不适用于gridview? [复制]

jQuery DataTables - 无法重新初始化 DataTable