将 Laravel 路由参数传递给 JavaScript

Posted

技术标签:

【中文标题】将 Laravel 路由参数传递给 JavaScript【英文标题】:Passing Laravel Route Parameter to JavaScript 【发布时间】:2019-03-03 08:46:47 【问题描述】:

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

我设置了一个路由,它可以拉取所有资产并作为数据表返回,但我需要的是拉取所有 school_id 等于 URL 中参数的资产。

所以我的应用程序应该是这样的:

用户登陆 /schools/school_id/assets .例如schools/1/assets Datatables 使用该 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 请求的最佳方法是什么?

【问题讨论】:

【参考方案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' =&gt; $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'),

【讨论】:

【参考方案2】:
$(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',
        ]
    );
);

【讨论】:

以上是关于将 Laravel 路由参数传递给 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel 路由参数传递给 JavaScript

如何将 JSON 返回数据作为参数传递给 URL 路由(laravel)

如何将 vue.js 值作为参数传递给刀片中的路由

将参数传递给 Laravel 中的中间件

在 Laravel 5.2 中将页面 URL 参数传递给控制器

如何使用 GET 方法将 GET 参数传递给 Laravel?