我尝试在Django中实现jquery datatable ajax-source用法但是有一些问题。
在javascript中引发aData is undefined
错误之后,ajax调用工作得很好并得到响应。
会出现什么问题?
这是我到目前为止所做的。
views.py
def model_history(request):
o = Model.objects.get(id=request.GET["pk"])
items_list = list(o.lastupdate_set.all().values())
return HttpResponse(simplejson.dumps(items_list),'application/json')
JS
function viewModelHistory(pk){
url1 = "/model/history/?pk="+pk;
$('#history').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": url1,
"fnServerData": function ( sSource, aoData, fnCallback ) {
$.ajax( {
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": fnCallback
} );
}
} );
}
listmodel.html
<table id="history">
<thead>
<tr>
<th>col1</th>
<th>col2</th>
<th>col3</th>
<th>col4</th>
<th>col5</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
答案 0 :(得分:3)
看起来您的JSON结构格式存在问题。 jquery.datatables希望它看起来像
{"aaData": [["blah1", "blah2", "blah3"]]}
如果您的JSON看起来像
[["blah1", "blah2", "blah3"]]
在view.py中,您需要将item_list包装在字典中,如下所示:
items_list_dict = {}
items_list_dict.update({'aaData': items_list})
return HttpResponse(simplejson.dumps(items_list_dict),'application/json')
答案 1 :(得分:0)
发布您的JSON输出会很有帮助,但我认为它看起来像这样:
[["key":"val"],["key":"val"]]
如果是这样,你需要从json中删除你的密钥。 Datatables希望json像这样:
[["val"],["val"]]
您可以做的一件事是从查询中列出一个列表
my_json = []
for item_list in items_list:
a = [item_list.xxx_column_name_xxx]
my_json.append(a)
items_list_dict = {}
items_list_dict.update({'aaData': my_json})
data = json.dumps(items_list_dict)
return HttpResponse(data, mimetype='application/json')