Php 将变量传递到laravel中的route时未找到404
我正在试着运行一个ajax调用,我一直在 404(未找到) 所以它很好地获得了id,但显示了404错误 route.phpPhp 将变量传递到laravel中的route时未找到404,php,laravel,Php,Laravel,我正在试着运行一个ajax调用,我一直在 404(未找到) 所以它很好地获得了id,但显示了404错误 route.php Route::post('rate/{book_id}','BookController@rate')->name('rate'); main.js $('#sub').submit(function(e){ var owl = $(this).attr("data"); var route = JSON.parse(owl); $
Route::post('rate/{book_id}','BookController@rate')->name('rate');
main.js
$('#sub').submit(function(e){
var owl = $(this).attr("data");
var route = JSON.parse(owl);
$.ajax({
type:"POST",
url:"rate/" + route.id,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success:function(res){
console.log("owls");
}
});
event.preventDefault();
});
控制器(书籍控制器)
HTML
<form id="sub" data= "{{ $book }}">
{!! csrf_field() !!}
<div id="rateYo" data-rateyo-rating="{{ $book->userSumRating or 0}}"> ></div>
<input name="rating" value='{{ $book->userSumRating or 0 }}' type="hidden" id="val">
<button type="submit" class="btn btn-primary mt-2">submit</button>
</form>
{!!csrf_field()!!}
>
提交
我认为您需要对javascript进行如下更改
$('#sub').submit(function(e){
var owl = $(this).attr("data");
var route = JSON.parse(owl);
$.ajax({
type:"POST",
url:"http://127.0.0.1:8000/rate/" + route.id,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success:function(res){
console.log("owls");
}
});
event.preventDefault();
});
这是因为在你的URL中,你是在rate/{rate_id}之前获得书籍的,这就是为什么它显示404页面未找到的错误 您使用的是ajaxpost,所以改用json响应,如下所示
public function rate(Request $request, $book_id)
{
$book = Book::find($book_id);
$rating = $book->ratings()->where('user_id', auth()->user()->id)->first();
if(is_null($rating)){
$ratings = new Rating();
$ratings->rating = $request['rating'];
$ratings->user_id = auth()->user()->id;
$book->ratings()->save($ratings);
return json_encode($book);
}
else{
return response()->json(['status' => "You already left a review"]);
}
}
添加并尝试此javascript代码
$.ajax({
type:"POST",
url:"http://127.0.0.1:8000/rate/" + route.id,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
data:{rating: $('#val').val()},
success:function(res){
console.log("owls");
}
});
就像这样使用它:-
$.ajax({
type:"POST",
url:"{{url('rate/')}}" + route.id,
headers: {
'X-CSRF-TOKEN': {{ csrf_token() }}
},
success:function(res){
console.log("owls");
}
});
你能添加你的控制器代码吗?是的,一旦sec rkjok刚刚更新了它,让我试试。我仍然收到
jquery.min.js:2帖子http://127.0.0.1:8000/books/rate/2 404(未找到)
您是否检查了在哪种情况下获得此功能?我的意思是在if case还是else case?它没有显示,只是说404没有找到。所以它没有提到后端。我认为这与csrf_令牌有关,然后尝试在ajax post数据“404(未找到)”中添加_令牌
,这使我更接近解决方案,但是SQLSTATE[23000]:完整性约束冲突:1048列“rating”不能为null(SQL:insert-into
ratings`(评级
,用户id
,应课差饷类型
,应课差饷id
,更新
,创建
)值(,1,App\Book,22008-07-28 05:18:242018-07-28 05:18:24),“跟踪:[{,…},{,{,…},{,{,},{,},{,},{,},{,},{,},{,},},{,},{,},},{,},},{,},},{,},},},{,},{,},},},{,},},{,},{,},},},},{,}`
$.ajax({
type:"POST",
url:"{{url('rate/')}}" + route.id,
headers: {
'X-CSRF-TOKEN': {{ csrf_token() }}
},
success:function(res){
console.log("owls");
}
});