【问题标题】:Binding DataTables with data from service将 DataTables 与来自服务的数据绑定
【发布时间】:2013-04-14 08:13:49
【问题描述】:

我可以像下面这样与 DataTables.net 进行静态绑定:

        <script type="text/javascript">

        $(document).ready(function () {
            $('#testDatatable').dataTable({

            "aaData": [
                ["Ibrahim", 55],
                ["Asif", 20],
                ["Shariful", 70],
                ["John", 55],
                ["Doe", 40],
                ["Nazmul", 30],
                ["Jane", 15],
                ["Ershad", 10],
                ["Yusuf", 44],
                ["Bill", 22],
                ["Steve", 18]
            ]
                ,
            "aoColumns": [
                { "sTitle": "Name" },
                { "sTitle": "Age" }
                ]

            });

        });

    </script>

但是对于 prop aaData,我想从 Web 服务中获取数据。如下:

        <script type="text/javascript">

        $(document).ready(function () {
            $('#testDatatable').dataTable({

                "aaData": $.getJSON('http://localhost:9183/Service.svc/GetCustomer')
                ,
            "aoColumns": [
                { "sTitle": "Name" },
                { "sTitle": "Age" }
                ]

            });
        });

    </script>

我的服务如下所示:

    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public List<Customer> GetCustomer()
    {
        List<Customer> customers = new List<Customer>();
        customers.Add(new Customer { Name = "Ibrahim", Age = 10 });
        customers.Add(new Customer { Name = "John Doe", Age = 20});
        return customers;
    }

这不起作用。它表明没有找到任何记录。 有人请告诉我我有哪些选择或哪里出错了。 任何建议都非常感谢。

【问题讨论】:

  • 你试过json类型吗?
  • [WebGet(ResponseFormat = WebMessageFormat.Json)] 应该将列表作为 JSON 返回,那么为什么我应该明确地将数据作为 JSON 字符串返回?
  • 但如果没有 JSON 字符串,您将无法获取单个元素/属性,例如 id、name 等...我想您应该仔细阅读文档
  • 没有文档,该服务是我自己的以及客户的。数据以 JSON 形式返回给我,或者我只能将其剥离为 JSON。但是 DataTables 没有响应我绑定的数据源。问题出在哪里。

标签: jquery wcf datatables


【解决方案1】:

您的网络服务正在返回一个对象数组,默认情况下 datatables 需要一个数组数组。您有两个选择,要么更新您的网络服务,要么更改您的数据表配置以使用 mData 属性按名称引用属性:

aoColumns": [
    { "sTitle": "Name", "mData": "Name" },
    { "sTitle": "Age", "mData": "Age" }
]

您可以在数据表reference page 中找到有关mData 的更多信息。只需搜索mdata

【讨论】:

  • 谢谢。但我终于能够使用他们的 sAjaxSource 解决这个问题。
【解决方案2】:

所以,我终于可以将 Datatable 与我的 Web 服务调用绑定。这是一种迂回的方法,但至少解决了我的主要目标。 我从我的服务中获取数据,运行一个循环,将 JSON 格式化为 Datatable 接受的格式 JS 数组,并将“aaData”设置为格式化的 JS 数组:

$(document).ready(function () {

            var returnData;
            $.ajax({
                url: "http://localhost:9183/Service.svc/GetCustomer",
                async: false,
                dataType: 'json',
                success: function (data) {
                    returnData = data;
                }
            });

            var arrayReturn = [], results = returnData;
            for (var i = 0, len = results.length; i < len; i++) {
                var result = results[i];
                arrayReturn.push([ result.Age, result.Name]);
            }

            $('#testDatatable').dataTable({

                "aaData": arrayReturn,
                "aoColumns": [
                { "sTitle": "Name" },
                { "sTitle": "Age" }
                ]

            });

        });

我不必更改服务中的任何内容。 但我仍然不知道为什么我上面的第一次尝试行不通,我还有什么更好的选择。因此,请随意推测。 感谢那些至少试图提供帮助的人。

【讨论】:

    【解决方案3】:

    我认为您可以将服务器端的列表转换为 JSON 并返回。有关简单示例,请参阅 thisthis

    当然,SO 上还有其他示例。

    【讨论】:

    • 为什么需要显式返回 JSON? [WebGet(ResponseFormat = WebMessageFormat.Json)] 不是已经将我的列表转换为 JSON 了吗?
    • 我没说你有,我说你可以:)
    • 好的。但这就是问题所在吗?因为我可以在客户端获取数据,但与 DataTables 绑定是个问题。
    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2016-09-30
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多