我正在使用DataTables来显示来自MySQL的数据。它工作正常,直到我被迫使用服务器端处理(100k行)。现在,当我在浏览器中加载表时,它工作正常,直到我使用DataTables的一些功能(搜索,列排序..)。当我点击例如列名,我得到的只是“处理...”消息。
我注意到,每次点击表格时,XMLHttpRequest中的绘图都会提高1,但我的代码中的'draw'仍然设置为1。
我对draw,recordsTotal,recordsFiltered在python / flask代码中的定义(缩写):
tick = table.query.all()
rowsCount = table1.query.count()
x = {'draw':1,'recordsTotal':rowsCount,'recordsFiltered':10}
y = dict(data=[i.serialize for i in tick])
z = y.copy()
z.update(x)
@app.route("/api/result")
def result_json():
return jsonify(z)
@app.route('/data')
def get_data():
return render_template('data.html')
我的JSON:
{
"data": [
{
"first": "Anton",
"id": 1,
"last": "Spelec"
},
{
"first": "Rosamunde",
"id": 2,
"last": "Pilcher"
},
{
"first": "Vlasta",
"id": 3,
"last": "Burian"
},
{
"first": "Anton",
"id": 4,
"last": "Bernolak"
},
{
"first": "Willy",
"id": 5,
"last": "Wonka"
}
],
"draw": 1,
"recordsFiltered": 5,
"recordsTotal": 5
}
我的带有DataTables初始化的html页面:
<script>
$(document).ready(function() {
$('#table_id').DataTable( {
"processing": true,
"serverSide": true,
"paging": true,
"pageLength": 10,
"lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
"ajax": {
url: 'api/result',
},
columns: [
{ "data": "id" },
{ "data": "first" },
{ "data": "last" }
]
} );
} );
</script>
<table id="table_id">
<thead>
<tr>
<th>id</th>
<th>first</th>
<th>last</th>
</tr>
</thead>
</table>
XHR在这里:
DataTables documentation建议将此参数转换为整数并将其发回。我发现类似的question关于绘制参数,它应该是相同的,但不幸的是我无法使其工作。我认为,将参数转换为整数不会有问题,但是我在下一步该怎么办或者如何将凸起的draw参数推送到我的JSON中。
谢谢。
如果DataTables正在向您的服务器发送draw
的新值 - 只需读取该值并将其发回:
@app.route("/api/result")
def result_json():
return jsonify(z)
可能只是变成(如果DataTables以其他方式发送值,则调整代码):
@app.route("/api/result")
def result_json():
z.update({'draw': request.form.get('draw')})
return jsonify(z)
我并没有解决你的代码似乎没有对过滤或搜索做任何事情,但至少它为你提供了一个构建的起点。
从你粘贴的XHR代码 - 看起来DataTables通过querystrings传递值 - 所以request.args.get('draw')
将是访问draw
数据值的方法。
draw参数仅供DataTables使用,以确保DataTables按顺序绘制从服务器端处理请求返回的Ajax。要使用排序,过滤和分页等功能,您必须根据使用服务器端处理时由Datatables传递的已发送参数来设置自己的查询数据系统。
默认参数是here。您还可以通过操作ajax调用中的数据对象,将自己的自定义参数包含到该对象中。