之前已经问过这个问题,但是没有解决方案适合我。这是我的代码
<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";
}
但它总是返回一个空数组,我不知道为什么它不起作用。
由于
答案 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进行调试。