将Laravel路由参数传递给JavaScript

时间:2018-09-27 12:23:38

标签: javascript ajax laravel parameters datatables

我正在Laravel中使用服务器端数据表(具体来说,Yajra)。

我有一条路由设置,可以拉出所有资产并以DataTable形式返回,但是我需要拉出school_id等于URL中的参数的所有资产。

所以我的应用程序应如下所示:

  • 用户登陆到/ schools / {school_id} / assets,例如school / 1 / assets
  • 数据表使用该{school_id}提取所有学校资产

到目前为止,我在脚本中使用的是以下内容:

$(function() {
    $('#assets-table').DataTable({
        processing: true,
        serverSide: true,
        ajax: '/api/assets',
        columns: [
            {data: 'asset_tag', name: 'assets.asset_tag'},
            {data: 'name', name: 'assets.name'},
        ]
    });
});

在URL中获取该ID并将其传递给该ajax请求的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

此答案将反映出我用来对所有文件进行结构化并且不将blade文件与js混合使用的方法。

在您的控制器中,您将拥有{school_id}。您可以这样简单地将其传递到刀片服务器:

return view('...')->with([
  'school_id' => $school_id
]);

创建一个简单的input字段以能够获取数据。

<input type="hidden" data-fetch-route="{{ route('name_of_route', ['school_id' => $school_id]) }}" id="schoolFetch">

.js文件中,您可以拥有:

$(function() {
 $('#assets-table').DataTable({
    processing: true,
    serverSide: true,
    ajax: $("#schoolFetch").attr('data-fetch-route'),
    columns: [
        {data: 'asset_tag', name: 'assets.asset_tag'},
        {data: 'name', name: 'assets.name'},
    ]
});

如您所见,您将拥有route('name_of_route', ['school_id' => $school_id]),这意味着您将需要在路由name_of_route上接受参数

如果您想做得更深入,更清洁,可以创建一个名为utilities.js的文件,该文件将具有您可以在整个应用程序中使用的所有功能,例如:

window.getRoute = function($element, action){
  return $element.attr('data-' + action + '-route');
}

ajax: $("#schoolFetch").attr('data-fetch-route'),

将变成

ajax: getRoute($("#schoolFetch"), 'fetch'),

答案 1 :(得分:0)

$(function() {
    $('#assets-table').DataTable({
        processing: true,
        serverSide: true,
        ajax: {{ route('name.your.route.here') }},
        columns: [
            {data: 'asset_tag', name: 'assets.asset_tag'},
            {data: 'name', name: 'assets.name'},
        ]
    });
});