#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');