2013-04-21 21 views
0

数据绑定的DataTable,我可以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> 

但对于道具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; 
    } 

这是行不通的。它显示没有找到记录。 有人请告诉我我有什么选择或哪里出问题。 任何建议,非常感谢。

+0

你试过json类型吗? – rafi 2013-04-21 10:16:03

+0

'[WebGet(ResponseFormat = WebMessageFormat.Json)]'应该返回列表为JSON,那么为什么我应该显式地返回数据作为JSON字符串? – lbrahim 2013-04-21 10:32:14

+0

但没有JSON字符串,你不能得到个人元素/财产,如id,名称等......我想你应该仔细阅读文档 – rafi 2013-04-21 10:52:06

回答

3

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

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

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

+0

谢谢。但我终于能够使用他们的sAjaxSource来弄清楚了。 – lbrahim 2013-04-24 07:33:00

0

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

当然还有其他例子可以在SO上找到。

+0

为什么我需要显式返回JSON?不是[WebGet(ResponseFormat = WebMessageFormat.Json)]'已经将我的列表转换为JSON是否返回? – lbrahim 2013-04-21 10:49:01

+0

我没说你有,我说你可以:) – evgenyl 2013-04-21 10:51:51

+0

好的。但是,这是问题吗?因为我可以在客户端获取数据,但与DataTables绑定是个问题。 – lbrahim 2013-04-21 11:16:23

1

所以,我终于可以绑定Datatable与我的Web服务调用。这是一个迂回的方法,但至少要约束它,这是我的主要目标得到解决。 我从服务中获得的数据,运行一个循环,我格式化JSON数据表,以接受的格式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" } 
       ] 

      }); 

     }); 

我没有任何改变的服务。 但我仍然不知道为什么我上面的第一次尝试不会工作,还有什么更好的替代方案,我有我的方式。所以请随意推测这个。 感谢至少尝试过帮助的人。