0

我尝试在 Django 中实现 jquery datatable ajax-source 的使用,但是有一些问题。ajax 调用运行良好并得到响应,但是aData is undefined在 javascript 中引发该错误之后。

会有什么问题?

这些是我到目前为止所拥有的。

视图.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
              } );
            }
          } );
}

列表模型.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>
4

2 回答 2

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')
于 2012-05-24T21:12:03.370 回答
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')
于 2013-04-21T05:35:08.790 回答