2016-05-12 76 views
0

我想要遵循一个例子,使用基于此示例的示例https://www.datatables.net/examples/ajax/objects.html使用JSON响应将数据添加到datatables.net数据表。datatables.net ajax错误 - http://datatables.net/tn/7

我正在使用AJAX调用从数据库获取JSON响应。

我收到的数据,然后使用NewtonSoft JSON.Net到数据表转换成JSON阵列按照下面的代码

string jsonResult = null; 
jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(dt); 
jsonResult = jsonResult.Replace("[{", "{\"data\" :[{").Replace("}]", "}]}"); 
return jsonResult; 

这是正在成功地从一个AJAX调用称为在一个单独的JavaScript文件按照下一个代码段

$.ajax({ 
      type: "POST", 
      url: "TeamChecks.aspx/GetDataTables", 
      data: JSON.stringify(params), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       console.log(data.d); 
       populateTable(data.d, tableId); 

      }, 
      error: function (data) { 
       console.log(data); 
      } 
     } 

哪个随后将返回的值应相应格式化将数据输入到所述数据表按照下一组代码的函数

function populateTable(json, tableId) { 
     try { 
      var table = $('#table_' + tableId).DataTable({ 
       "processing": true, 
       "serverSide": true, 
       "ajax": json, 
       "columns:": [ 

        { "data": "CaseHandlerStaffNumber" }, 
        { "data": "RiskProfileText" }, 
        { "data": "AssignedCheckerStaffNumber" }, 
        { "data": "FeedbackUserStaffNumber" }, 
        { "data": "ComplaintRef" }, 
        { "data": "ChildComplaintRef" }, 
        { "data": "CaseTypeText" }, 
        { "data": "CheckGrade" } 
       ] 
      }); 
     } catch (e) { 

     } 
    } 

我得到的问题类似于这里的这个问题jquery datatables Ajax-Error/http://datatables.net/tn/7但是,我试过这个用户解决方案,并且有同样的问题。

我已按照此处所述的所有推荐步骤进行了操作https://www.datatables.net/manual/tech-notes/7,但未看到与此相关的回复的任何错误。

我将不胜感激,如果有人可以帮助我,这是我不能看到解决这个问题的方式在目前

感谢

西蒙

+0

1)什么JSON是asp.net回来了? 2)你确定你没有在你返回的时候对你的JSON进行双重序列化?请参阅[ASP.NET Web服务错误:手动JSON序列化](http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/)或[ASP.NET WebMethod返回JSON包装在引号中](https://stackoverflow.com/questions/2998455)或者[JSON.NET解析器*似乎*是双连载我的对象](https://stackoverflow.com/questions/25559179)。 – dbc

+0

被返回的JSON是正确的,已经在JSONLint中进行了验证,从Newtonsoft JSON.Net创建了什么,然后当它出现在JQuery中,所以我不认为它的双序列化,但会检查 –

+0

解决此问题的任何运气? –

回答

0

基本上,你的工作对自己,当你有ajax调用来获取数据,但然后添加ajax到数据表定义。

设置web方法;请注意,当您这样做时,数据会被序列化两次,一次由您和一次由脚本服务模块进行序列化。

[WebMethod] 
public string getTheData(String params){ 
    SomeDataClass dt = getthedata(); 
    return Newtonsoft.Json.JsonConvert.SerializeObject(dt); 
} 

现在AJAX:

$(document).ready(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "TeamChecks.aspx/GetDataTables", 
     data: JSON.stringify(params), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
      // jquery did the first deserialization 
      // here is where the second deserization happens. 
      var data = JSON.parse(reponse.d); 

      populateTable(data, tableId); 

     }, 
     error: function (data) { 
      console.log(data); 
     } 
    } 
}); 

那么你的功能

function populateTable(json, tableId) { 

     var table = $('#table_' + tableId).DataTable({ 
      // in this layout DataTables is expecting a straight array of objects or array of arrays depending on how you are sending the data back 
      "data": json, 
      "columns:": [ 
       { "data": "CaseHandlerStaffNumber" }, 
       { "data": "RiskProfileText" }, 
       { "data": "AssignedCheckerStaffNumber" }, 
       { "data": "FeedbackUserStaffNumber" }, 
       { "data": "ComplaintRef" }, 
       { "data": "ChildComplaintRef" }, 
       { "data": "CaseTypeText" }, 
       { "data": "CheckGrade" } 
      ] 
     }); 

    }