我需要向一个定义为.NET的资源Route发送一个PUT请求。
Route::resource('posts','PostController');
我的代码是这样工作的。
var data = $(this).serializeArray();
data.push( {name:'_token',value:"{{ csrf_token() }}" })
$.ajax({
type: "Put",
url: _url,
data: data,
dataType: "json",
success: function (response) {
if(response.status){
toastr.success(response.msg);
}
else{
toastr.warning(response.msg);
}
},
});
但是问题来了,当我需要通过该路由发送文件时,我不得不将我的提交函数修改为.CSRF token Mismatch。
var data = new FormData(this);
data.append("_token","{{ csrf_token() }}");
var _url = $(this).attr('action');
$.ajax({
type: "Put",
url: _url,
data: data,
dataType: "json",
processData: false,
contentType: false,
success: function (response) {
if(response.status){
toastr.success(response.msg);
}
}
我遇到了一个异常信息 "CSRF token Mismatch"。这是因为我使用了 FormData()
?
在您的刀片中添加 csrf
<meta name="csrf-token" content="{{ csrf_token() }}">
然后通过头文件发送,通过附加数据来避免发送
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
并删除这一行 data.append("_token","{{ csrf_token() }}");
并尝试
尝试在头部分传递csrf_token。
var data = $(this).serializeArray();
$.ajax({
type: "Put",
url: _url,
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
data: data,
dataType: "json",
success: function (response) {
if(response.status){
toastr.success(response.msg);
}
else{
toastr.warning(response.msg);
}
},
});
还有一种方法,当你提交表单时,在表单中传递token。
<form>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>