2015-05-14 26 views
0

我想从django 1.8.1中的服务器加载数据到jQuery数据表。在这个过程的最后,我得到了“Uncaught TypeError:无法读取未定义的”javascript错误的属性长度“。Django的jQuery数据表:未捕获TypeError:无法读取未定义的属性'长度'

查看;

datas = Datas.objects.all() 
jsonData = serializers.serialize('json', datas) 
return HttpResponse(jsonData, content_type='application/json') 

在浏览器的“网络”中,可以看到它返回像这样的json数组;

[{"fields": {"objectname": "O1"}, "model": "my_app.datas", "pk": 1}] 

Html;

<table class="table table-striped table-bordered table-hover" id="id_dataTable" style="cursor: pointer;"> 
</table> 

Js;

$('#id_dataTable').dataTable({ 
     "sAjaxSource": '/getData/', 
     "aoColumns": [ 
      {'mData': 'fields.objectname'} 
     ], 
     "aoColumnDefs": [ 
      { 
       "aTargets": [0], 
       "sTitle": "Object", 
       "sClass": "align-center" 
      } 
     ], 
     "bProcessing": true, 
     "bServerSide": true, 
     "bPaginate": false 
    }); 

你能帮忙吗?谢谢

回答

1

检查jQuery的数据表的doumentation: https://www.datatables.net/examples/ajax/objects.html

您需要提供您的数据的格式如下:

[ 
    { 
    "name": "Tiger Nixon", 
    "position": "System Architect", 
    "salary": "$3,120", 
    "start_date": "2011/04/25", 
    "office": "Edinburgh", 
    "extn": "5421" 
    }, 
    {...} 
] 

您可以通过DATAS迭代中你的观点建立的对象,将它们追加到数组中,然后通过JsonResponse发送响应:

from django.http import JsonResponse 

datas = Datas.objects.all() 
arr = [] 
for data in datas: 
    arr.append({ 
     'key1': data.key1, 
     'key1': data.key1, 
    }) 
return JsonResponse(arr, safe=True) 
+0

首先非常感谢您的回答。这真的很有帮助。我改变了一些部分。如果它是通过JsonResponse完成的,JsonResponse 需要一个字典,我也为此响应安排了javascript。 – kbrk

+0

JsonResponse也可以是Python/Django中的列表。将成为JavaScript中的数组。 – Juergen

0

查看;

datas= Datas.objects.all() 
      dataArray = [] 
      for store in datas: 
       dataArray.append({ 
        'objectname':data.objectname 
       }) 

return JsonResponse({'data':dataArray}, safe=True) 

Js;

$('#id_dataTable').dataTable({ 
      "sAjaxSource": '/getData/', 
      "aoColumns": [ 
       {'mData': 'objectname'} 
      ], 
      "aoColumnDefs": [ 
       { 
        "aTargets": [0], 
        "sTitle": "Object", 
        "sClass": "align-center" 
       } 
      ], 
      "bProcessing": true, 
      "sAjaxDataProp": "data", 
      "bServerSide": true, 
      "bPaginate": false 
     }); 

这里有一个答案..

相关问题