Laravel - Как включить внешний JS-файл (содержит Ajax) - PullRequest
0 голосов
/ 12 ноября 2018

Я использую ajax для публикации выбранного значения. Он отлично работает со следующим кодом. И я хочу отделить файл jvascript от index.blade.php .

web.php

Route::get('Homepage', function (){
    return view('frontend.index');
});

Route::post('Homepage/filter', 'Frontend\ImgListController@filter')
    ->name('Homepage.filter');

контроллер

function filter(Request $request)
    {    
        $get_Model = $request->get('Model');
        Log::debug($get_Model);    
    }

Если у меня есть мой код «просмотра», подобный приведенному ниже, выбранное значение может быть корректно отправлено в URL: «{{route ('Homepage.filter')}}».

index.blade.php

<html>
<head></head>    
<body>
   <div class="form-group">
      <select name="Model" id="Model">
         <option value="">Select Model</option>
            <option>1</option>
            <option>2</option>
            <option>3</option>
      </select>

      <button class="btn" onclick="Fun();">submit</button>

   </div>

   {{ csrf_field() }}

   <script src="{{ asset('jquery/jquery.min.js') }}"></script>

</body>
</html>

<script>
   function Fun() {
     if ($('#Model').val() != '') {
       var model_value = $('#Model').val();

       $.ajax({
         url: "{{ route('Homepage.filter') }}",
         type: "POST",
         data: {
             Model: model_value,
             _token: '{{csrf_token()}}'
         },
         success: function (result) {
         //
         }
       })    
     }    
  }
</script>

Однако, когда я пытаюсь добавить это <script type="text/javascript" src="{{ URL::asset('js/jquery.js') }}"></script> в index.blade.php , и независимо от файла jvascript (public \ js \ JS.js). Я получил бы сообщение об ошибке ниже.

POST http://localhost:8888/%7B%7B%20route('Homepage.filter')%20%7D%7D 404 (не найдено)

index.blade.php (изменен и где-то не так)

<html>
<head></head>    
<body>
   <div class="form-group">
      <select name="Model" id="Model">
         <option value="">Select Model</option>
            <option>1</option>
            <option>2</option>
            <option>3</option>
      </select>

      <button class="btn" onclick="Fun();">submit</button>

   </div>

   {{ csrf_field() }}

   <script src="{{ asset('jquery/jquery.min.js') }}"></script>
   <script type="text/javascript" src="{{ URL::asset('js/JS.js') }}"></script>

</body>
</html>

1038 * Javascript * function Fun() { if ($('#Model').val() != '') { var model_value = $('#Model').val(); $.ajax({ url: "{{ route('Homepage.filter') }}", type: "POST", data: { Model: model_value, _token: '{{csrf_token()}}' }, success: function (result) { // } }) } } Маршрут {{route ('Homepage.filter')}} неверен? Или что-нибудь еще? Что я могу сделать, чтобы исправить это? Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы не можете записать синтаксис лезвия laravel внутри .js файла.

, поэтому вы не можете дать прямое имя маршрута для URL-адреса ajax

, который вы можете вызвать напрямуюURL маршрута.

и для данных проходного токена

просто поместите токен в метатег внутри заголовка html

<meta name="csrf-token" content="{{ csrf_token() }}">

итогда вы можете прикрепить данные токена в вашем js

function Fun() {
    if ($('#Model').val() != '') {
        var model_value = $('#Model').val();
        var token = $('meta[name="csrf_token"]').attr('content'),
        $.ajax({
            url: "/Homepage/filter",
            type: "POST",

            data: {
                Model: model_value,
                _token: token 
            },
            success: function (result) {
                //
            }
        })
    }
}
0 голосов
/ 12 ноября 2018

Вы можете сделать так:

Добавьте строку ниже в ваш основной файл макета.

@stack('scripts')

чем поставить скрипт ниже в конце вашего индексного файла.

@push('scripts')
     <script src="{{ asset('assets/js/JS.js')}}"></script>
@endpush
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...