Django jquery数据表“aData未定义”错误

时间:2012-04-29 22:23:20

标签: ajax django jquery datatable

我尝试在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>

2 个答案:

答案 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')