Laravel 和 Datatables:Ajax 数据不使用来自 html 选择的新 ajax 参数刷新表
Posted
技术标签:
【中文标题】Laravel 和 Datatables:Ajax 数据不使用来自 html 选择的新 ajax 参数刷新表【英文标题】:Laravel & Datatables: Ajax data not refreshing table with new ajax parameters from html select 【发布时间】:2017-05-29 12:16:11 【问题描述】:你能帮帮我吗?我正在使用 laravel 开发一个使用数据表的后端应用程序。情况是我正在从 mailgun 检索邮件列表,并希望返回该邮件列表中的用户。我正在使用来自 laravel 刀片的 html 选择标签,并希望通过将邮件列表作为参数发送到 ajax 请求来刷新数据表,但没有任何反应。我关注了这个问题
https://datatables.net/forums/discussion/30286/ajax-reload-is-not-sending-updated-params
下面是我的代码
LARAVEL 刀片:
Mailing List: <select id="mailing-list">
@foreach($lists as $list)
@if($list->address == 'users@sample.com')
<option selected="selected" value="$list->address">$list->address</option>
@else
<option value="$list->address">$list->address</option>
@endif
@endforeach
</select>
数据表:
// get variable for mailing list
mailingListName = document.getElementById("mailing-list").value;
$('#mailing-list').change(function()
table.ajax.reload();
);
// data table
var table = $('.data_Tables_wrapper').DataTable(
"bPaginate": true,
"bJQueryUI": true,
"iDisplayLength": 50,
"sPaginationType": "full_numbers",
"ajax":
url: 'lists/data',
data: function ( d )
return JSON.stringify( d.mail = mailingListName );
,
"order": [ 2 ],
"columns": [
data:"email", name: "email" ,
data:"name", name: "name" ,
data:"subscribed", name: "subscribed"
]
);
知道为什么数据表没有用正确的数据刷新。
【问题讨论】:
与您的问题没有直接关系,但您可以尝试使用yajra/laravel-datatables-oracle 包。 @linuxartisan 我不认为我可以使用它,因为我使用的列表来自 mailgun api,但感谢您的建议。 【参考方案1】:尝试将 ajax 对象中的 data
函数更改为如下内容:
"ajax":
url: 'lists/data',
data: function ( d )
d.mail = mailingListName;
(查看DataTable网站中的examples)
不过,我不知道服务器在“邮件”上期待什么样的数据。另外,请记住数据表将此数据作为 GET 请求发送。
【讨论】:
【参考方案2】:$('#table').dataTable().fnDestroy();
$('#table').dataTable(
"bDestory": true,
bRetrieve: true);
bRetrieve:检索现有的 DataTables 实例 bDestory:销毁与选择器匹配的任何现有表并替换为新选项。
但在数据表文档中
,变成"destroy": true, "retrieve": true
,试试看……
【讨论】:
我应该把这些参数放在哪里?在change函数里面?抱歉问了。var table = $('.data_Tables_wrapper').DataTable( "bPaginate": true, "bJQueryUI": true, "iDisplayLength": 50, "sPaginationType": "full_numbers", "bDestory": true, bRetrieve: true
【参考方案3】:
感谢 Sebastianb 和 fall.lu 的回答。我发现在“选择”选项已更改时,为什么无法加载数据。而不是将其放在更改事件之外。我应该把它放进去,然后我会得到那个邮件列表的正确数据。
$('#mailing-list').change(function()
mailingListName = document.getElementById("mailing-list").value;
table.ajax.reload();
);
【讨论】:
以上是关于Laravel 和 Datatables:Ajax 数据不使用来自 html 选择的新 ajax 参数刷新表的主要内容,如果未能解决你的问题,请参考以下文章
DataTables 在本地工作,托管时出现 404 和 Ajax 错误
在 Laravel 项目中使用 DB 方法得到 DataTables 错误