【问题标题】:404 not found when passing variable to route in laravel在laravel中将变量传递给路由时找不到404
【发布时间】:2018-07-28 13:39:17
【问题描述】:

我正在尝试运行 ajax 调用,但我不断收到

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

所以它可以很好地获取 id,但显示 404 错误。

route.php

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

ma​​in.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>

【问题讨论】:

  • 您可以添加有问题的控制器代码吗?
  • 是每秒一次 rkj
  • 好的,刚刚更新了

标签: php laravel


【解决方案1】:

您正在使用 ajax 发布,所以改为使用 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");
        }
});

【讨论】:

  • 让我试试这个。
  • 我仍然收到jquery.min.js:2 POST http://127.0.0.1:8000/books/rate/2 404 (Not Found)
  • 你检查过你得到这个的条件吗?我的意思是在 if case 或 else case 中?
  • 它没有显示,它只是说 404 not found。所以它没有提供对后端的引用。我认为它与 csrf_token 有关系
  • 然后尝试在您的 ajax 帖子数据中添加 _token
【解决方案2】:

我认为您需要像下面这样更改 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 page not found 错误的原因!

【讨论】:

  • 这让我更接近解决方案,但是
  • SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'rating' cannot be null (SQL: insert into ratings` (rating, user_id, rateable_type, rateable_id, updated_at, created_at) 值 (, 1, App\Book, 2, 2018 -07-28 05:18:24, 2018-07-28 05:18:24))" 跟踪:[{,…}, {,…}, {,…}, {,…}, {,…} , {,…}, {,…}, {,…}, {,…}, {,…}, {,…},…]`
【解决方案3】:

就这样使用它:-

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

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 2015-03-16
    • 1970-01-01
    • 2020-01-23
    • 2017-05-03
    • 2015-02-22
    • 2015-01-06
    相关资源
    最近更新 更多