Laravel 5.5 ajax 成功函数 returns 空数组

Laravel 5.5 ajax success function returns empty array

以前有人问过这个问题,但没有一个解决方案适合我。这是我的代码

<meta name="csrf-token" content="{{csrf_token()}}">

和剧本

<script type="text/javascript">
    $(document).ready(function () {
        $(".comment-rate-wrapper a img").on('click', function (e) {
            e.preventDefault();
            var item_id = 1;
            var url = "{{route('like.voteHandler', ':id')}}";
            url = url.replace(':id', item_id);
            //alert(url); I am sure thr url is correct and it outputs correctly
            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                }
            });
            $.ajax({
                method: 'POST', // Type of response and matches what we said in the route
                url: url, // This is the url we gave in the route
                data: {
                    'item_id': item_id
                },
                success: function (result) { // What to do if we succeed
                    console.log(result);
                },
                error: function (jqXHR, textStatus, errorThrown) { // What to do if we fail
                    console.log(JSON.stringify(jqXHR));
                    console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
                }
            });
        })
    })
</script>

这是控制器函数

    public function voteHandler($item_id)
    {
        echo "sas";
        return "hi";
    }

但它总是 returns 一个空数组,我不知道为什么它不起作用。

谢谢

在您的控制器中试试这个

public function voteHandler(Request $request)
{
    return response()->json(["item_id" => $request->item_id]);
}

编辑: 这实际上是请求方法的错误, 更改您的路由声明以匹配您的 ajax 请求方法 POST

$router->post('{item_id}/voteHandler', 'LikeController@voteHandler')->name('like.voteHandler');

或将您的 ajax 方法更改为 GET

更改参数并打印输入

public function voteHandler(Request $request)
{
    print_r($request->all());
}

确保它到达这个方法。使用 firebug 进行调试。

您可以检查您的 Ajax 请求,如下所示 way.You 应该尝试以下方式。

public function voteHandler(Request $request) {
 if(Request::ajax()){
        return response()->json(['status'=>'Ajax request']);
    }
    return response()->json(['status'=>'Http request']);
}