Laravel 5.5 ajax成功函数返回空数组

时间:2018-03-14 10:00:04

标签: php ajax laravel laravel-5.5

之前已经问过这个问题,但是没有解决方案适合我。这是我的代码

<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";
    }

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

由于

3 个答案:

答案 0 :(得分:1)

在你的控制器中试试这个

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

答案 1 :(得分:1)

您可以像下面这样检查您的Ajax请求。您应该尝试以下方式。

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

答案 2 :(得分:0)

更改参数并打印输入

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

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