【发布时间】:2020-01-26 12:11:38
【问题描述】:
您好,我正在使用 djangorestframework-datatables 和 datatables 的 JQuery 插件。
我正在加载一个启用了 serverSide 选项的大表(大约 15000 个条目,分页)。我启用了这个选项,因为客户端处理加载表的时间太长(即使使用 deferLoading)。
我想从以下 URL 检索数据:
/api/device_input/?format=datatables&device_id=something
// device_id can be 1, 2, 3 and so on.
问题是,我不知道如何动态更改 device_id 参数。该参数绝对是用户输入。以下是我之前的做法(使用客户端处理):
1) 用户在表单中输入设备 ID。表单被提交。
2) Django 视图接受 POST 请求并将过滤后的查询集返回给模板。
3) 查询集填充 HTML 表值,数据表处理其余部分(分页等)
但是现在有了服务器端处理,我不需要 django 视图来返回任何查询集。我可以通过ajax获取数据。我想要的行为是:
1) 用户打开页面,显示一个空数据表,并提示输入设备 ID。
2) 用户输入设备 ID,数据表会加载该设备 ID 的记录。
但是数据表的 ajax 请求只有在有人弄乱数据表时才会被调用(例如更改页面或选择页面长度)。当有人在我的表单中输入 device_id 并动态告诉 ajax 创建正确的 URL 时,我想调用 ajax 请求。
这是我的 javascript 的样子:
<!-- Javascript function to initialize the datatable -->
<script>
var device_id = document.getElementById("id_input").value
$(document).ready(function() {
$("#device_inputs_table").DataTable({
"lengthMenu": [
[10, 20, 30, -1],
[10, 20, 30, "All"]
],
fixedHeader: {
headerOffset: 62
},
"order": [
[0, "desc"]
],
"serverSide": true,
"ajax": "/api/device_input/?format=datatables&device_id=" + device_id, // need to add a number at the end that user will input
"columns": [
// All my table columns
]
});
});
</script>
我确信这很简单,但是我对 ajax 和 javascript 的不熟悉让我摸不着头脑,感谢任何帮助!
更新:我尝试添加一个简单的变量以从表单元素中获取 device_id,但它没有添加到我的 URL...如何在 dom 上打印我的 URL? (我只检查了 chrome 开发工具上的网络选项卡...)当然我的表单甚至没有调用 ajax 请求,所以这是另一个问题。
【问题讨论】:
标签: javascript jquery django ajax datatables