Передача параметра маршрута Laravel в JavaScript - PullRequest
0 голосов
/ 27 сентября 2018

Я использую DataTables на стороне сервера в Laravel (точнее, Yajra ).

У меня настроен маршрут, который извлекает все активы и возвращает как DataTable, но чтоМне нужно вытащить все активы, где school_id равен параметру в URL.

Поэтому мое приложение должно выглядеть следующим образом:

  • Пользователь попадает в /hools / {school_id} / assets .eg 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и передать его в этот запрос AJAX?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Этот ответ будет отражать метод, который я использую, чтобы структурировать все файлы и не смешивать 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'),
0 голосов
/ 27 сентября 2018
$(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'},
        ]
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...