代码之家  ›  专栏  ›  技术社区  ›  BARNOWL

在laravel中将变量传递到route时找不到404

  •  0
  • BARNOWL  · 技术社区  · 6 年前

    我试着运行一个ajax调用,我不断地

    http://127.0.0.1:8000/books/rate/2 404(未找到)

    所以它很好地得到了id,但是显示了404错误。

    route.php路径

    Route::post('rate/{book_id}','BookController@rate')->name('rate');
    

    主.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();
    
    });
    

    控制器 (图书管理员)

    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 redirect()->back()->with("status", "You already left a review");
        }
    }
    

    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>
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   rkj    6 年前

    您使用的是ajax post,因此改为重定向使用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");
            }
    });
    
        2
  •  1
  •   Harsh Virani    6 年前

    我认为您需要对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页未找到错误的原因!

        3
  •  -1
  •   Sandeep Bangarh    6 年前

    就这样用吧:-

    $.ajax({
                type:"POST",
                url:"{{url('rate/')}}" + route.id,
                headers: {
                        'X-CSRF-TOKEN':  {{ csrf_token() }}
                  }, 
                success:function(res){
                   console.log("owls");
                }
         });