【问题标题】:Datatables server side ajax and sAjaxSource have different request parameter数据表服务器端 ajax 和 sAjaxSource 具有不同的请求参数
【发布时间】:2018-08-21 09:09:37
【问题描述】:

我使用 sAjaxSource 参数制作了一个带有服务器端处理的数据表。

$('#tbl-kamus').DataTable({
    "processing": true,
    "bServerSide": true,
    "sAjaxSource": srcUri ,
    ...

当它向服务器发出请求时,它会使用以下参数发送 GET 数据:

sEcho: 1
iColumns: 4
sColumns: ,,,,,,
iDisplayStart: 0
iDisplayLength: 30
mDataProp_0: 0
sSearch_0: 
bRegex_0: false
bSearchable_0: true
bSortable_0: false
mDataProp_1: 1
sSearch_1: 
bRegex_1: false
bSearchable_1: true
bSortable_1: true
mDataProp_2: 2
sSearch_2: 
bRegex_2: false
bSearchable_2: true
bSortable_2: true
mDataProp_3: 3
sSearch_3: 
bRegex_3: false
bSearchable_3: true
bSortable_3: false
sSearch: 
bRegex: false
iSortCol_0: 1
sSortDir_0: desc
iSortCol_1: 2
sSortDir_1: desc
iSortingCols: 2

并使用 php 中的那些 GET 参数来处理请求。 然后我需要向请求添加更多参数,所以我将选项更改为

$('#tbl-kamus').DataTable({
    "processing": true,
    "bServerSide": true,
    "ajax": {
         "url": srcUri,
         "data": {
         "user_id": userID
    }
    ...

整个请求参数变成了类似数组的东西:

draw: 1
columns[0][data]: 0
columns[0][name]: 
columns[0][searchable]: true
columns[0][orderable]: false
columns[0][search][value]: 
columns[0][search][regex]: false
columns[1][data]: 1
columns[1][name]: 
columns[1][searchable]: true
columns[1][orderable]: true
columns[1][search][value]: 
columns[1][search][regex]: false
columns[2][data]: 2
columns[2][name]: 
columns[2][searchable]: true
columns[2][orderable]: true
columns[2][search][value]: 
columns[2][search][regex]: false
columns[3][data]: 3
columns[3][name]: 
columns[3][searchable]: true
columns[3][orderable]: false
columns[3][search][value]: 
columns[3][search][regex]: false
order[0][column]: 1
order[0][dir]: desc
order[1][column]: 2
order[1][dir]: desc
start: 0
length: 30
search[value]: 
search[regex]: false
user_id: 2

所以我必须更改我的服务器端脚本以适应它,这是我避免的。然后作为一种解决方法,我继续使用 sAjaxSource 并将 user_id 附加到 url 中,例如:

"sAjaxSource":srcUri+"?user_id="+userID+"&",

困扰我的是为什么他们有不同的请求参数格式。谁能解释一下为什么它们不同以及每种方法之间的意义是什么?

编辑:

对不起,我的解释可能不是很清楚。我在这里要问的不是如何在数据表 ajax 中传递参数。虽然我非常感谢提到 fnServerParams,这是我需要的 atm。

我在这里要问的是为什么sAjaxSource和ajax之间的请求参数如此不同? 或者两种方法都有不同的目的? 我似乎无法在文档中找到它。

【问题讨论】:

  • 使用 fnServerParams 而不是以编程方式添加它们。你真的不能避免数组样式,因为这是 DT 传递回来的方式,例如在 certian 列上进行排序。 datatables.net 上都有详细记录

标签: javascript datatable datatables


【解决方案1】:

来自documentation

旧版本的 DataTables (1.9-) 使用了一组不同的参数 从服务器发送和接收。像这样编写的脚本 对于 DataTables 1.10+ 将无法与 DataTables 一起使用 1.9-。但是,DataTables 1.10 确实为为 1.9- 编写的脚本提供了兼容模式。此兼容模式由使用触发 旧的 sAjaxSource 参数(而不是新的 ajax 参数) 或通过设置 $.fn.dataTable.ext.legacy.ajax = true;

当您将 sAjaxSource 与 DataTables (1.10+) 一起使用时,您触发了兼容模式,DataTables (1.10+) 发送和接收的参数集与旧版 DataTables (1.9-) 不同。

Server Side Example with Custom HTTP variables - Legacy

Server Side Example with Custom HTTP variables

【讨论】:

  • 天哪!它一直就在文件上,我一定是盲人。谢谢jeetaz
  • 顺便说一句,我更喜欢使用 $.fn.dataTable.ext.legacy.ajax = true;ajax: { ... } 直到我更新服务器端代码以解析新格式而不是旧格式。这样,我就可以在前端进行更新,只需要摆脱$.fn.dataTable.ext.legacy.ajax = true;。谢谢你,我的朋友
  • @Fr0zenFyr - 很高兴它有帮助! (y)
猜你喜欢
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多