在我的应用程序中,我正在使用Ajax请求,但它给了我jquery-3.3.1.js:9600 POST http://localhost:8000/get_types_ajax
gettin 419(未知状态)
我的JavaScript是:
$(document).ready(function() {
var ckbox = $("input[name='particulars']");
var chkId = '';
$("input[name='particulars']").on('change', function() {
if (ckbox.is(':checked')) {
values = [];
names = [];
$("input[name='particulars']:checked").each ( function() {
amount = $(this).val().split(",");
console.log("amount",amount);
values.push(amount[0]);
names.push(amount[1]);
});//checked
total_value = 0;
values.forEach(function(value) {
value = Number(value);
total_value = total_value + value;
document.getElementById('total').innerHTML = total_value;
});//foreach
}//if
else {
total_value = 0;
document.getElementById('total').innerHTML = total_value;
}
$.ajax({ url:"{{url('/get_types_ajax')}}",
type: 'POST',
data: {message:names},
success: function (data)
{
console.log(data);
}
});
});//onchange
});//ready
我的web.php是:
Route::post('/get_types_ajax', 'DevkrutyaController@get_types');
答案 0 :(得分:1)
您遇到的419错误是由于ajax请求中缺少CSRF令牌引起的。要传递csrf令牌,可以使用jquery的ajax设置方法
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
$.ajax({
url:"{{url('/get_types_ajax')}}",
type: 'POST',
data: {message:names},
success: function (data)
{
console.log(data);
}
});
});//onchange
});//ready
有关更多信息,https://laravel.com/docs/master/csrf#csrf-x-csrf-token
答案 1 :(得分:1)
我知道。您没有通过发帖请求传递CSRF_TOKEN
如果您使用的是post方法,那么您必须以其他方式传递CSRF_TOKEN
,您可以忽略(跳过)VerifyCSRF令牌中间件中的某些网址
protected $except = [
'stripe/*',
];
否则,请在您的js文件中添加此行,它将自动发送 csrf令牌
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
有关更多详细信息,请阅读此article
答案 2 :(得分:1)
Laravel使用CSRF令牌来保护您的应用程序免受跨站点请求伪造(CSRF)攻击。您将需要在ajax中传递CSRF令牌。
标题中
<meta name="csrf-token" content="{{ csrf_token() }}" />
脚本中
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
</script>