Laravel лучший способ сделать запрос AJAX GET с параметрами

#ajax #laravel #get #request

Вопрос:

Маршрут:

 Route::get('/user/{id}', "UserController@get")->name('user');//Get all users is not allowed.
 

Форма:

 <form>
<select id="selected_user">
<option value="1">Bob</option>
<option value="2">Alice</option>
</select>
<button id="get_user">Query</button>
</form>
 

АЯКС:

 $.ajax({
  url: "{{ route('user')}}" id,
  type: "GET",
  data: null,
  dataType: 'json':
}).done(function(response){
  console.log(response);
});
 

Что вы получаете: development.ERROR: Missing required parameters for [Route: user] [URI: user/{id}] [Missing parameters: id].

Да, но я все еще не знаю, какого пользователя я выберу, поэтому я не могу указать там параметр…

Обходной путь 1:

 POST Request (But I am not POST ing anything?)
 

Обходной путь 2 в AJAX:

 let id = getHTMLId();
url: {{ URL::to('/'); }} "/user/" id;//I will have to update all AJAX requests if there is a change to URL so it is now: users/get/{id}
 

Обходной путь 3 (я не знаю, возможно ли это вообще):

 Route::get('/user/{id?}', "UserController@get")->name('user');//Optional parameters, but the application should not be allowing a request to /users/ alone.
 

Ожидаемый метод от Laravel

URL::routeWithoutParams(«пользователь»);//Где пользователь-именованный маршрут

Есть ли правильный способ выполнить простой запрос GET?

Я не нашел никакой информации, и все примеры, похоже, читают все данные, такие как пользователи/getall

Ответ №1:

Вы не можете передавать параметры с маршрутом, как вы это делаете.

 url:"{{ route('user')}}" id, //This is wrong way
 

Правильный путь-это:

 var url = "{{route('user', ':id')}}";
url = url.replace(':id', id);
 

используйте указанную выше url переменную с вызовом ajax.

Надеюсь, это будет полезно.

Ответ №2:

 let tmpUrl = "{{ route('user', 0)}}";
tmpUrl = tmpUrl.substr(0, tmpUrl.length - 1)   id;
 

или

 let tmpUrl = "{{ route('user', '---')}}";
tmpUrl = tmpUrl.replace('---', id);