Php 将变量传递到laravel中的route时未找到404

Php 将变量传递到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); $

我正在试着运行一个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);

        $.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");
            }
     });