не удалось получить данные, отправленные через ajax в контроллере Laravel 5.1

Я отправляю данные через ajax на мой контроллер, как

$.ajax({ url: 'test', type: 'POST', data: { id: sessionStorage.getItem('user_id') }, dataType: 'json', contentType: "application/json; charset=utf-8"/*, success:function(id){ alert(sessionStorage.getItem('user_id')); }*/ }); 

и в контроллере я использую

 public function getUserMessages(){ $id = Input::get('id'); $messages = Message::where('message_by' , Auth::user()->id)->where('message_for',$id)->get(); echo "id is ",$id; return $messages; } 

Я ничего не получаю в $id . Я также пробовал $_POST['id'] котором указан undefined index id . Как я могу получить значение id? $request->has('id') возвращает false.

Проблема в том, что вы устанавливаете контент приложения как json, вам не нужно устанавливать контент.

jQuery ajax

contentType (по умолчанию: 'application / x-www-form-urlencoded; charset = UTF-8')

 $.ajax({ url: 'test', type: 'POST', data: { id: sessionStorage.getItem('user_id') }, dataType: 'json', success:function(data){ console.log(data); // always good to output content for debugginn } }); 

Надеюсь, эта помощь. Теперь ваш ajax должен работать.

Вы должны использовать класс Request вместо Input :

 public function getUserMessages(\Illuminate\Http\Request $request){ $id = $request->id; $messages = Message::where('message_by' , Auth::user()->id)->where('message_for',$id)->get(); return $messages; } 

Ваш вызов ajax не работает и будет вызывать 500 Server Error, потому что вам нужно передавать токен csrf laravel с ним всякий раз, когда вы POST что-то. Создайте метатег в верхней части вашего вида лезвия, например:

 <meta name="_token_" content="{{ csrf_token() }}"> 

и получить значение, когда вы делаете вызов ajax:

 $.ajax({ url: '/test', type: 'POST', data: { id: sessionStorage.getItem('user_id'), _token:document.getElementsByName('_token_')[0].getAttribute('content') }, success:function(id){ alert(id); } }); 

Скорее всего, функция успеха в вашем вызове ajax будет только оповещать [объект объекта], чтобы получить лучший обзор о том, что было возвращено, использовать

 console.log(id); 

вместо.

Вы также можете создать функцию ошибки для вызова ajax, чтобы отображались возможные ошибки. Просто добавьте

 error: function(err){ console.log(err); } 

после функции успеха.

У вас есть маршрут для запросов AJAX? (Я этого не вижу).

Пожалуйста, попробуйте следующий код:

В коде AJAX:

 $.ajax({ type: "POST", url: "{{ route('ajax_route') }}", data: { _token: "{{ csrf_token() }}", data: "sample data" }, success: function(data){ $(".result").html(data); }, dataType: "json" }); 

В коде контроллера:

 public function ajaxAction(Request $request){ if ($request->isXmlHttpRequest() && $request->isMethod('post')) { $data = $request->input('data', null); echo json_encode($data); } } 

В вашем коде маршрута:

 Route::post('/ajax_route', ['as' => 'ajax-action', 'uses' => 'YourController@ajaxAction']);