用户ID未通过Laravel中的Ajax传递

时间:2019-06-27 06:58:04

标签: ajax laravel model-view-controller counter

我正在laravel中创建视图计数器,因此,在这种情况下,我为客户列表创建了小卡片,如果有人按“视图”按钮,则卡片会展开并也计为视图。

我在前端使用Buefy,因此每当按下视图时卡都会展开,我还会添加onclick事件并传递特定卡的当前用户ID,单击后它将调用AJAX函数,该函数将+1递增在view_counter列中。 但是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(未知状态)

4 个答案:

答案 0 :(得分:1)

在使用POST请求时,您可能需要随请求一起发送csrf _token,也可以尝试GET请求

答案 1 :(得分:0)

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

$request->id

希望有帮助! :)

答案 2 :(得分:0)

将此行更改为

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

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

额外阅读:

  

findOrFail和firstOrFail方法将检索查询的第一个结果;但是,如果未找到结果,将抛出Illuminate\Database\Eloquent\ModelNotFoundException

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

答案 3 :(得分:0)

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

YearMonth

每次在帖子中调用ajax时,都需要重复此操作。

  1. 标题中的设置:- 您需要先对其进行设置,然后它才能全部使用。无需再次设置。
data: {
  'id': val,
  '_token': "csrf_token"
},