1

我只是在尝试使用以下 json 对象进行查询的数据表示例...

[{"firstName":"pom",
"lastName":"sdfpom",
"email":null,
"password":"cfe9a43acec0a35f903bc2d646ce8e58b5ef6b67",
"username":"Dave",
 "access":null,
"id":1},
{"firstName":"FirstName",
"lastName":"LastName",
"email":null,
"password":"8d60258ef3ae1b8eae67e9298f15edf5c6e05dfe",
"username":"Username",
"access":null,
"id":2}]

这在下面的变量数据中返回...

<script>
$(document).ready(function() {
    $.getJSON('userManagement/getAllUsers', function(data) {
            $('#table').dataTable( {
                "sAjaxSource": data
        });
    });
});

    </script>
    <table id="table">
        <thead>
            <tr>
                <th>firstName</th>
                <th>lastName</th>
                <th>email</th>
                <th>password</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Row 1 Data 1</td>
                <td>Row 1 Data 2</td>
                <td>etc</td>
            </tr>
            <tr>
                <td>Row 2 Data 1</td>
                <td>Row 2 Data 2</td>
                <td>etc</td>
            </tr>
        </tbody>
    </table>

现在 JSON 似乎是有效的,当我用它做任何其他事情时,例如在 jquery 中使用它时它工作正常,但数据表根本无法正确呈现。我使用的javascript有问题吗?

4

4 回答 4

5

默认情况下,DataTables 将为其数据源处理数组数组:当它必须处理对象数组(如您的情况)时,还有一个额外的步骤。它在插件文档中的这个示例中进行了描述。基本上,您要做的是添加“列”属性的描述(作为数组):

$('#table').dataTable({
  "aaData": data,
  "aoColumns": [
    { "mData": "firstName" },
    { "mData": "lastName" },
    { "mData": "email" },
    { "mData": "password" },
    { "mData": "username" },
    { "mData": "access" },
    { "mData": "id" }
  ]
});

这是小提琴玩。

于 2012-10-11T17:12:53.313 回答
1

您的 json 是数组中的一个对象。

所以代替这个

"sAjaxSource": data

试试这个

"sAjaxSource": data[0]
于 2012-10-11T17:07:31.963 回答
1
$.ajax( {
          "dataType": 'json',
          "type": "POST",
          "url": sSource,
          "data": aoData,
          contentType: "application/json; charset=utf-8",
          async : false,
          success: function (json) { 
            fnCallback(json);
          },
          complete: function (msg,a,b) {
            console.log('complete :'+msg) 
          },
          error : function(msg,a,b) {
            console.log('error:'+msg);
          }
        } );

async : false 非常重要。这将导致在正确绑定 json 数据之前不呈现页面。

这对我有用。

于 2015-04-07T07:01:00.837 回答
0

首先检查您的 json 是否有效或不使用 www.jsonlint.com 。

其次,尝试用 aaData 封装您的 JSON 对象,例如:

{"aaData" :[{"firstName":"pom","lastName":"sdfpom","email":null,
"password":"cfe9a43acec0a35f903bc2d646ce8e58b5ef6b67",
"username":"Dave","access":null,"id":1},
{"firstName":"FirstName","lastName":"LastName","email":null,
"password":"8d60258ef3ae1b8eae67e9298f15edf5c6e05dfe",
"username":"Username","access":null,"id":2}] 
}
于 2012-10-12T10:44:24.797 回答