我正在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(未知状态)
答案 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时,都需要重复此操作。
data: {
'id': val,
'_token': "csrf_token"
},