【问题标题】:Laravel & Datatables: Ajax data not refreshing table with new ajax parameters from html selectLaravel 和 Datatables:Ajax 数据不使用来自 html 选择的新 ajax 参数刷新表
【发布时间】: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,但感谢您的建议。

标签: php jquery ajax laravel datatable


【解决方案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();
                            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2016-10-07
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      相关资源
      最近更新 更多