Ajax возвращает ошибку 404 в Laravel 8, но маршрут существует

#jquery #laravel #routes #jquery-select2

Вопрос:

Я реализую jQuery Select2() в своей форме. Когда я пытаюсь выполнить поиск, мой ajax всегда возвращает ошибку 404. Но маршрут существует в web.php файл.

Вот мой код:

Web.php

 Route::get('/searchByName/{var1}', [AppHttpControllersAppointmentsController::class, 'searchByName'])-gt;name('searchByName');  

Файл JS

 $(document).ready(function() {   url = $(".js-example-basic-single").attr('data-url');  $.ajaxSetup({  headers: {  'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')  }  });  $(".js-example-basic-single").select2({  dropdownParent: $('.name-search-box'),  language: {  inputTooShort: function () {return "Plase enter minimum 3 caracteres";},  minimumInputLength: function () {return "Plase enter minimum 3 caracteres";},  noResults: function () {return "no results";}  },  minimumInputLength: 3,  placeholder: "Select a patient",  allowClear: true,  width: "100%",  debug: true,  ajax: {  type: "GET",  url: "/searchByName",  delay: 500,  dataType: 'json',  data: function (params) {  var query = {  search: params.term  }   // Query parameters will be ?search=[term]amp;type=public  return query;  },  processResults: function (resp) { console.log('response'   resp);  return {  results: resp  }  },  cache: true  }   });  }  

AppointmentsController.php

 public function searchByName($var1){    $key = $request-gt;get('search');  $name = DB::table('patients_tbl')-gt;select('id', 'first_name', 'middle_name', 'last_name')  -gt;where('first_name', 'LIKE', "%$key%")-gt;get()-gt;toArray();    return $name;   }  

Я пробовал маршрут с параметрами и без них, очистил все типы кэша, включая кэш маршрутов и т. Д., Но Безрезультатно.

Комментарии:

1. Ваш URL-адрес url: «/searchByName», но ваш маршрут » /searchByName/{var1}». Вам нужно добавить свой URL-адрес в переменную.

Ответ №1:

Маршрут в вашем файле ajax не содержит параметров. В URL: «/searchByName», но в маршрутах он имеет один параметр в виде {var1}

 ajax: {  type: "GET",  url: "/searchByName",  delay: 500,  dataType: 'json',  data: function (params) {  var query = {  search: params.term }  

Попробуйте этот код один раз:

 var uri = "{{ route('searchByName', ':variable') }}"; uri = uri.replace(':variable', var1); $.ajax({  url: uri,  type: 'get',  dataType: 'json',  success: function(response) {  console.log(response);  });  

Ответ №2:

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

 localhost/searchByName?search=abc  

но маршрут в php определен так

 localhost/searchByName/abc   

Это совсем другое .

Ответ №3:

Я решил проблему, изменив метод с GET на POST и добавив _token параметр с в функцию ajax. Вот мой исправленный код

Файл JS

 $(document).ready(function() {   //var uri = "{{ route('searchByName', ':variable') }}";  //uri = uri.replace(':variable', var1);  //alert(uri);  var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');  $.ajaxSetup({  headers: {  'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')  }  });  $(".js-example-basic-single").select2({  dropdownParent: $('.name-search-box'),  language: {  inputTooShort: function () {return "Plase enter minimum 3 caracteres";},  //minimumInputLength: function () {return "Plase enter minimum 3 caracteres";},  noResults: function () {return "no results";}  },  minimumInputLength: 1,  placeholder: "Select a patient",  allowClear: true,  width: "100%",  debug: true,  ajax: {  type: "POST",  url: '/searchByName',  delay: 500,  dataType: 'json',  data: function (params) {  return {  _token: CSRF_TOKEN,  search: params.term // search term  };  },  processResults: function (data) { console.log(data);  return {  results: $.map(data, function(obj) {  return { id: obj.id, text: obj.first_name };  })  };  },  cache: true  }   });  });  

и web.php

 Route::post('/searchByName', [AppHttpControllersAppointmentsController::class, 'searchByName'])-gt;name('searchByName');