在将数据放入Datatable时,在客户端解析错误的JSONArray

时间:2014-04-12 16:17:55

标签: jquery json parsing datatable arrays

我在服务器端有这个代码:

@RequestMapping(value="friendFamily/getFriendsByUserId", method=RequestMethod.GET,
        produces = "application/json")
public String getFriendsByUserId(@RequestParam("userId") Long userId){
//....
List<User> friendsList = (((ArrayList<Friends>)session.createCriteria(Friends.class).
                add(Restrictions.eq("person", user)).list()).get(0)).getFriends();
JSONArray array = new JSONArray();
for (User tempUser: friendsList){
    array.put(new JSONObject(tempUser));
}
return array.toString();

在客户端,我想将这些数据放入datatable:

$("#browseFriendsAndFamily").click(function(){
          var contPath='<%=request.getContextPath()%>';
          $.get(contPath + "/friendFamily/getFriendsByUserId",
              "userId="+loggedUser.id, function(friendsList){
                  $("#friendFamilyDialog").dialog("open");
                  friendsTable = $("#friendsTable").dataTable({
                      "bJQueryUI": true,
                       "aoColumnDefs": [ {"bVisible": false, "bSortable": false, "aTargets": [3]}],
                       "bSortClasses": false
                  });
                  familyTable = $("#familyTable").dataTable({
                      "bJQueryUI": true,
                      "aoColumnDefs": [ {"bVisible": false, "bSortable": false, "aTargets": [3]}],
                      "bSortClasses": false
                  });
                  for(var i=0, length=friendsList.length; i<length; i++){
                      friendsTable.fnAddData(friendsList[i].name, friendsList[i].surname,
                      friendsList[i].login, friendsList[i].id);
                      console.log(friendsList[i].login);
                  }     
               });                 
            });

但是在datatables中,如果我得到例如名字=“Paul”surname =“Smith”login =“Paul123”id =“38”的人,它表现得像它不像JSON的数组那样理解但是喜欢一个字符串数组,它在名字列“P”中,在姓氏列“a”中,在登录列“u”中,在一个单词中 - 它将它视为“不理解”即JSON,这是一点点对我来说很奇怪。我究竟做错了什么?如果我写:

console.log(friendsList[i].login)

我看到了正确的值,例如“Paul123”。如果有人帮助我,我会很高兴 - 提前谢谢你。

@Update :我现在看到一些奇怪的行为 - 即使我这样做了:

for(var i=0, length=friendsList.length; i<length; i++){
   var name = friendsList[i].name;
   var surname = friendsList[i].surname;
   var login = friendsList[i].login;
   var id = friendsList[i].id;
    friendsTable.fnAddData(name, surname,
         login, id);
   console.log(friendsList[i].surname);
}

仍然以相同的方式行事......我在浏览器中看到变量值是正确的但在数据表中它以与以前相同的方式工作,它在表的列中进一步放入'char'来自变量名称的值(它将其视为'C-string')...

1 个答案:

答案 0 :(得分:0)

<强> @Answered 即可。以下是Datatables论坛的解决方案 - &gt; Datatables treats String variable like a C-string(char[])? (click)