数据表服务器端ajax和sAjaxSource具有不同的请求参数

时间:2018-08-21 09:09:38

标签: javascript datatable datatables

我已经使用 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之间的请求参数如此不同? 还是两种方法都有不同的用途? 我似乎在文档中找不到它。

1 个答案:

答案 0 :(得分: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.9-)不同。

Server Side Example with Custom HTTP variables - Legacy

Server Side Example with Custom HTTP variables