用户 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 时都需要重复它。
- header 中的设置:-
一旦它适用于所有人,您就需要对其进行设置。无需重新设置。
if (s.type == "POST") {
xhr.setRequestHeader('X-CSRF-Token', csrf_token);
}
});
我在 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 时都需要重复它。
- header 中的设置:- 一旦它适用于所有人,您就需要对其进行设置。无需重新设置。
if (s.type == "POST") {
xhr.setRequestHeader('X-CSRF-Token', csrf_token);
}
});