2016-05-16 47 views
0

我正在將一個Datatables.Net插件插入到我公司的內部Web應用程序中。Datatables.Net - 不從JSON數據填充

我面對的問題是在變量JSON中,我可以看到我已經返回了一個JSON響應,並且根據JSONLint它是有效的,但是我無法從JSON數組中將信息從我的表中取出,儘管如下Datatables上的示例以及搜索其幫助站點的示例。

請看我的代碼,讓我知道爲什麼這不是填充表。

function populateTable(json, tableId) { 
     var id = 'table_' + tableId; 
     console.log("Columns In"); 
     //console.log("table id: " + id + " JSON Response: " + json); 
     try { 
      var table = $('#' + id).DataTable({ 
       "data": json.d, 
       "deferRender": true, 
       "columns:": [ 

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

     } 

     try { 
      table.columns().every(function() { 
       var that = this; 
       $('input', this.footer()).on('keyup change', function() { 

        if (that.search() !== this.value) { 
         that 
          .search(this.value) 
          .draw(); 
        } 
       }); 
      }); 

     } catch (e) { 

      console.log("Error detected: " + e); 
      console.log(e); 
     } 
    } 

- 編輯 -

這是我的JSON數據的一個例子。

{ 
"data": [{ 
    "CaseHandlerStaffNumber": "12345678", 
    "RiskProfileText": "Low Risk FOS", 
    "AssignedCheckerStaffNumber": "77665544", 
    "FeedbackUserStaffNumber": null, 
    "ComplaintRef": "999999", 
    "ChildComplaintRef": "2333", 
    "CaseTypeText": "FOS Submission", 
    "CheckGrade": "Ungraded" 
}] 
} 

也,這是我正在製作的JSON

[System.Web.Services.WebMethod()] 
public static object GetDataTables(string checkId, int userId) 
{ 

List<string> listOfColumnns = new List<string>(); 
listOfColumnns.Add("CaseHandlerStaffNumber"); 
listOfColumnns.Add("RiskProfileText"); 
listOfColumnns.Add("AssignedCheckerStaffNumber"); 
listOfColumnns.Add("FeedbackUserStaffNumber"); 
listOfColumnns.Add("ComplaintRef"); 
listOfColumnns.Add("ChildComplaintRef"); 
listOfColumnns.Add("CaseTypeText"); 
listOfColumnns.Add("CheckGrade"); 

int checkStatusId = Convert.ToInt32(checkId.Replace("hidJson_tbl_", "")); 

TeamChecks tc = new TeamChecks(); 

DataTable dtMc = default(DataTable); 
dtMc = tc.Get_DatatableFor_GridView(userId, checkStatusId); 

DataTable dt = new DataTable(); 

foreach (void colName_loopVariable in listOfColumnns) { 
    colName = colName_loopVariable; 
    dt.Columns.Add(string.Format("{0}", colName)); 
} 

foreach (void row_loopVariable in dtMc.Rows) { 
    row = row_loopVariable; 
    dt.Rows.Add(row("CaseHandlerStaffNumber"), row("RiskProfileText"), row("AssignedCheckerStaffNumber"), row("FeedbackUserStaffNumber"), row("ComplaintRef"), row("ChildComplaintRef"), row("CaseTypeText"), row("CheckGrade")); 
} 
string jsonResult = null; 
jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(dt); 
jsonResult = jsonResult.Replace("[{", "{\"data\" :[{").Replace("}]", "}]}"); 


return jsonResult; 

} 
+0

請注意,JSONLint只會使鬆散檢查句式,它不檢查非法字符,字符的控制等。您可以輕鬆獲得一個**有效的JSON **,這將使IRL失敗,並通過網絡傳遞。您可以使用** http://www.freeformatter.com/json-validator.html**; RFC 4627檢查包括測試JSON實際上是否可用。 – davidkonrad

+0

當我使用'數據:傑森'這是拋出一個錯誤指示我在這裏datatables.net/manual/tech-notes/4並給我大約4000行的空值,我只需要17行數據 –

+0

也只是檢查JSON在您給出的鏈接上並獲得了兩次傳遞1.關閉 根據RFC 4627(JSON規範),JSON輸入有效。 和2關閉 JSON輸入在JavaScript中有效。 –

回答

1

首先,確保你的「數據」屬性,例如最終刪除多餘的空間

{ "data": "caseHandlerStaffNumber" }, 

如果你的數據在對象數組的形式,你需要使用「標題」屬性爲這裏定義https://datatables.net/examples/data_sources/js_array.html例如

$('#example').DataTable({ 
    data: dataSet, 
    columns: [ 
     { title: "Name" }, 
     { title: "Position" }, 
     { title: "Office" }, 
     { title: "Extn." }, 
     { title: "Start date" }, 
     { title: "Salary" } 
    ] 
}); 

如果您使用NuGet包,它在內部使用Json.NET串行器與一個選項,以降低數據集的情況下,第一個字母。所以,你只需要指定數據時,按如下方式使用小寫:

   { "data": "caseHandlerStaffNumber" }, 
       { "data": "riskProfileText" }, 
       { "data": "assignedCheckerStaffNumber" }, 
       { "data": "feedbackUserStaffNumber" }, 
       { "data": "complaintRef" }, 
       { "data": "childComplaintRef" }, 
       { "data": "caseTypeText" }, 
       { "data": "checkGrade" } 
+0

@SlaveGu我編輯了我的問題,以顯示我正在使用的數據的一個示例,如果這可以幫助您解決問題。是的,我使用Newtonsoft.JSON.Net塊來序列化數據 –

+0

還沒有爲我工作,使用''數據「:json'給我錯誤指示我在這裏https://www.datatables.net/手冊/技術說明/ 4,並給我大約4000行的空值,我只需要17行數據。 –

+0

我剛剛創建了一個包含json數據的代碼片段,它工作正常:http://jsfiddle.net/hn4yhacm/確保您的語法正確,例如在「columns:」屬性中刪除額外的冒號。 – SlavaGu