Я отправляю данные через 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']);