Javascript 获取CSRF令牌不匹配Laravel
我正在尝试使用javascript提交表单,但我不断收到此错误Javascript 获取CSRF令牌不匹配Laravel,javascript,php,ajax,laravel,laravel-5,Javascript,Php,Ajax,Laravel,Laravel 5,我正在尝试使用javascript提交表单,但我不断收到此错误CSRF令牌不匹配。我试图更改var url=“{{route('review.store')}”到{{route('review.store')}}?{u-token={{csrf_-token()}}并且它正在将表单提交到数据库,而没有数据。我见过很多类似的问题,但我没有得到一个解决我的情况。我如何才能解决这个问题 <form id="form" enctype="multipart/form-data"> &
CSRF令牌不匹配。我试图更改var url=“{{route('review.store')}”
到{{route('review.store')}}?{u-token={{csrf_-token()}}
并且它正在将表单提交到数据库,而没有数据。我见过很多类似的问题,但我没有得到一个解决我的情况。我如何才能解决这个问题
<form id="form" enctype="multipart/form-data">
<input type="hidden" value="{{csrf_token()}}" id="token"/>
<div class="form-group" >
<label for="title">Title</label>
<input type="text" name="title" >
</div>
<div class="form-group">
<label for="description">Description</label>
<input type="text" name="description">
</div>
</form>
<input type='button' value="Submit" id="btn"/>
路线
您在隐藏字段中缺少名称\u标记,只需序列化
形成并发送请求
标题
描述
$(文档).ready(函数(){
$(“#btn”)。单击(函数(事件){
event.preventDefault();
var url=“{route('review.store')}}”;
var formData=$('#form').serializeArray();
$.ajax({
url:url,
数据:formData,
键入:“POST”,
cache:false,
contentType:false,
processData:false,
成功:功能(数据){
if($.isEmptyObject(data.error)){
$(“#msg”).html(“成功”);
$(“#msg”)。淡出(3000);
}
}
});
});
});
在jquery中,请按如下方式获取令牌:
var data = {
"_token": $('#token').val()
};
你也可以试试看
data: {
"_token": "{{ csrf_token() }}",
"id": myid
}
因此,您的ajax请求将是
$.ajax({
url : "url",
method:"post",
data : {
"_token": $('#csrf-token')[0].content
},
// Other stuffs to do
});
请尝试这样使用,然后序列化表单数据
{{csrf_field()}}
标题
描述
尝试使用@csrf
或{{csrf_field()}
您仍然可以尝试。我拿走了表单标签和表单上的csrf令牌
//形式
<div class="form-group" >
<label for="title">Title</label>
<input type="text" id="title" name="title" >
</div>
<div class="form-group">
<label for="description">Description</label>
<input type="text" id="description" name="description">
</div>
</form>
<input type='button' class="btn-submit" value="Submit" id="btn"/>
标题
描述
//ajax调用
<script>
$(function() {
$(".btn-submit").click(function(e){
var title= $("input[name=title]").val();
var description= $("input[name=description]").val();
$.ajax({
url: murl +'/your-url',
type: "post",
data: {'title':title, 'description':description, '_token': $('input[name=_token]').val()},
success: function(data){
console.log(data);
}
});
});
});
</script>
$(函数(){
$(“.btn提交”)。单击(功能(e){
var title=$(“输入[name=title]”)。val();
var description=$(“输入[name=description]”)val();
$.ajax({
url:murl+'/您的url',
类型:“post”,
数据:{'title':title,'description':description,'u token':$('input[name='u token')).val(),
成功:功能(数据){
控制台日志(数据);
}
});
});
});
解决此问题的最佳方法“X-CSRF-TOKEN”是在主布局中添加以下代码,并继续正常进行ajax调用:
在标题中
<meta name="csrf-token" content="{{ csrf_token() }}" />
在表单中,在表单中的任意位置添加csrf令牌
<form>
{{ csrf_field() }}
</form>
{{csrf_field()}}
手稿
<script type="text/javascript">
$.ajax({
url: url,
data: formData,
type: 'POST',
cache: false,
contentType: false,
processData: false,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
success:function(data){
if($.isEmptyObject(data.error)){
$("#msg").html("successfull");
$("#msg").fadeOut(3000);
}
}
});
</script>
$.ajax({
url:url,
数据:formData,
键入:“POST”,
cache:false,
contentType:false,
processData:false,
标题:{
'X-CSRF-TOKEN':$('meta[name=“CSRF-TOKEN”]).attr('content'))
}
成功:功能(数据){
if($.isEmptyObject(data.error)){
$(“#msg”).html(“成功”);
$(“#msg”)。淡出(3000);
}
}
});
我希望它对您有用我建议您使用
@csrf
及
在表单HTML标记中,
然后newformdata()
处理crsf和方法输入请求有效负载是否具有\u令牌
值?使用浏览器开发工具确认。是的,它是@ab.in请添加您的web.php
文件。检查updated@ab.inAre你确定你的请求到达了正确的终点?你能为请求负载添加屏幕截图吗?我添加了仍然显示CSRF令牌不匹配的屏幕截图。“
@Lalit KumarI检查如何序列化表单?@Lalit KumarStill显示CSRF令牌不匹配。”
并且在负载中显示此[对象对象对象对象],[对象对象对象对象],[对象对象],[对象]
@Lalit KumarPrint请求不要在url:murl+'/your-url'中使用dataso这是什么murl
,
因为我得到的murl没有定义
@Julius fasemaoh!实际上浏览器上的应用程序url已经在布局上定义好了。因此,murl所做的是选择定义好的url,将其缩短并将其附加到url中在ajax调用中。抱歉,您可以在您的案例中删除它。我尝试了这种方式,它显示错误CSRF令牌不匹配
,但它显示formData{title,description}@Julius Fasemait has to do Session::flush()。尝试修复它如何?您可以更新您的答案吗?也许@Julius Fasema
<form>
{{ csrf_field() }}
</form>
<script type="text/javascript">
$.ajax({
url: url,
data: formData,
type: 'POST',
cache: false,
contentType: false,
processData: false,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
success:function(data){
if($.isEmptyObject(data.error)){
$("#msg").html("successfull");
$("#msg").fadeOut(3000);
}
}
});
</script>
@csrf
@method("PUT")