我正在使用datatable,我想在每次页面更改时执行ajax ajax调用。但我仍然想知道";d";在ajax.data的来源以及每次ajax调用后如何修改它以下是数据表文档中的示例
$('#example').dataTable( {
"ajax": {
"url": "data.json",
"data": function ( d ) {
d.extra_search = $('#extra').val();
}
}
} );
简短回答:
d
表示要作为DataTables Ajax请求的一部分发送到服务器的任何预先存在的数据。
您的数据将附加到该数据中。
两个这样的";预先存在的数据";是:
-
缓存设置为false时由jQuery生成的时间戳。
-
DataTables在使用服务器端处理时创建的请求数据。
有关这些信息,请参阅下文。
通过使用data
选项作为函数,可以动态地向服务器发送数据,其中每个DataTables Ajax请求的数据值可能不同。如果您只是简单地使用data: { "user_id": 451 }
硬编码方法(甚至是一个变量),您将无法做到这一点。
d
允许您在向请求添加额外数据时保留任何预先存在的数据。
更多详细信息和示例:
第一个例子:
这将向公共可用的JSON服务发送一个基本的GET
请求。此处没有明确的data
选项:
$(document).ready(function() {
var table = $('#example').DataTable( {
ajax: {
method: "GET",
url: "https://jsonplaceholder.typicode.com/posts",
dataSrc: ""
},
"columns": [
{ "title": "User ID", "data": "userId" },
{ "title": "ID", "data": "id" },
{ "title": "Title", "data": "title" }
]
} );
} );
如果使用带有jQuery设置cache: false
(默认设置)的GET
,那么jQuery将导致向请求添加时间戳参数:
。。。附加"_={timestamp}";到GET参数。。。
所以,在我上面的例子中,这将类似于:
https://jsonplaceholder.typicode.com/posts?_=1629810701730
您还可以提供自己的硬编码请求数据:
ajax: {
method: "GET",
url: "https://jsonplaceholder.typicode.com/posts",
dataSrc: "",
data: { "user_id": 451 }
}
现在,请求URL将如下所示:
https://jsonplaceholder.typicode.com/posts?user_id=451&_=1629810932716
但是user_id=451
的这个值在初始化DataTable时被硬编码到DataTable定义中,以后不能动态更改
通过使用data
的函数(而不是硬编码的值),您可以提供每次提交Ajax请求时可能不同的user_id
值:
ajax: {
method: "GET",
url: "https://jsonplaceholder.typicode.com/posts",
dataSrc: "",
"data": function ( d ) {
d.user_id = $('#selected_user_id').val();
}
}
在上面的示例中,d
表示要提交给服务器的任何预先存在的数据,例如_=1629810701730
。
服务器端处理:
另一个重要的";预先存在的数据";例如,当您使用服务器端处理时。在这种模式下,DataTables自动生成data
结构,如这里的";发送的参数";部分
该数据是服务器所需要的,以便服务器能够构造正确的";下一页";要显示给用户的结果的数量。
如果您没有将额外的(可选的)数据附加到预先存在的(必需的)数据中,它将被您的数据覆盖。
";如何修改">
关于您关于修改d
数据的问题:通常,您不想修改预先存在的数据,只想将自定义数据附加到其中(或更新之前附加的自定义数据):
"data": function ( d ) {
d.user_id = $('#selected_user_id').val();
}
在上面的示例中,user_id
参数是从ID为selected_user_id
的元素的当前值导出的。当然,您可以在这里使用您想要的任何逻辑来构建您需要发送到服务器的任何复杂数据结构。
该数据结构被添加到d
已经包含的任何内容中:d.user_id
最后注意:如果没有预先存在的数据(例如,如果您使用的是POST
而不是GET
,其中没有下划线时间戳),那么您将数据添加到一个空对象中。