无法在控制器Laravel 5.1中检索通过ajax发送的数据


unable to retrieve data sent via ajax in controller 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。

您应该使用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服务器错误,因为无论何时POST,您都需要将laravel的csrf令牌与之一起传递。在刀片视图的顶部创建一个元标签,如:

<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调用中的成功函数很可能只会提醒[object object],为了更好地了解返回的内容,请使用

console.log(id);

相反。

您还可以为ajax调用创建一个错误函数,以便显示可能的错误。只需添加

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

成功函数之后。

问题是您将应用程序内容设置为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现在应该可以工作了。

您有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']);