用户 ID 未在 laravel 中通过 Ajax

User Id is not passing through Ajax in laravel

我在 laravel 中创建视图计数器,情况是这样的,我为客户列表创建了小卡片,如果有人按下 "view" 按钮,卡片会展开并算作视图。

我在前端使用了 Buefy,所以每当我按下视图时卡片就会展开,我还添加了 onclick 事件并传递了特定卡片的当前用户 ID,点击后它会调用 AJAX 函数这将在 view_counter 列中增加 +1。 但是 Ajax 没有将 id 传递给控制器​​,我尝试了 alert ,它工作正常,这意味着我的语法是错误的。

这是我的观点:network.blade.php

                      <button
                            onclick='viewUpdate("{{$user->id}}")'
                            class="button is-primary"
                            slot="trigger"
                            aria-controls="contentIdForA11y1" 
                            >
                              View!
                      </button>

我的Ajax脚本:

 <script>
   function viewUpdate(val) 
   {
    //alert(val);
    jQuery.ajax({
    url: "{{ url('dne/viewincrement') }}",
    method: 'post',
    data: {
      'id': val
    },
    success: function(result){
    console.log('success');
    }
   });
  }
 </script>

据我所知,当有人点击按钮时,它会发送该卡的用户 ID 并在脚本中存储在 viewUpdate(val) 中,现在我将 Id 的值传递给控制器​​。

这是我的路线:

    Route::prefix('dne')->group(function() {
     Route::post('/viewincrement', 'DNE\DNEFrontController@count');
    }

这是我的控制器:DNEFrontController.php

   public function count(Request $request)
   {
    //dd($request);
    $user = DNEUser::findOrFail($id);
    if(isset($user) && !empty($user)){
      $user->view_counter+=1;
      $user->save();
     }
     //$this->addData('user', $user);
    return $this->getView('dne.customer.pizza');
    }

view_counter 是我的列,默认为 0,它将递增 +1。 当前情况:按钮正在工作并调用了 Ajax,它会在警报中显示 id 值,但在控制台中会抛出:

POST http://localhost:8000/dne/viewincrement 419(未知状态)

当您使用 POST 请求时,您可能需要在请求中发送 csrf 令牌,或者您可以尝试 GET 请求

当您将它传递给 ajax 时,它会被请求,因此您应该这样称呼它

$request->id

希望对您有所帮助! :)

将此行更改为

$user = DNEUser::findOrFail($id);

$user = DNEUser::findOrFail($request->id);

补充阅读:

The findOrFail and firstOrFail methods will retrieve the first result of the query; however, if no result is found, a Illuminate\Database\Eloquent\ModelNotFoundException will be thrown:

如果未捕获异常,将自动向用户发送 404 HTTP 响应。

419 状态代码表示未找到令牌或令牌已过期。 因此,您可以使用两种方法获取通行证:- 1.传递数据:-

data: {
  'id': val,
  '_token': "csrf_token"
},

每次用 post 调用 ajax 时都需要重复它。

  1. header 中的设置:- 一旦它适用于所有人,您就需要对其进行设置。无需重新设置。
if (s.type == "POST") {
   xhr.setRequestHeader('X-CSRF-Token', csrf_token);
}
});