尝试创建删除选项时出现以下错误:
POST 419 (unknown status)
和AJAX ERROR: {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
我想知道代码有什么问题?我是AJAX和JSON的新手,所以我不确定它出了什么问题,但我觉得有一件小事可以修复它。
$('[data-js-type=modal-submit]').on('click', function(e) {
$.ajax({
url: "deleteCategory",
method: "POST",
dataType: "json",
data: { id: $("[data-js=open-remove]").find('span').attr('id') },
success: function(result) {
console.log("Success : ", result);
if (result.Success) {
//Reload the Page
document.location.reload(true);
} else if (result.Error) {
console.log('Error From the Sever ', result.Error);
}
},
error: function(error) {
console.log("AJAX ERROR: ", error);
}
});
});
Route::post('/deleteCategory', 'CategoryController@removeCategory')->name('category.delete');
public function removeCategory(Request $request) {
//Find the Category
$category = Category::findOrFail($request->id);
//Delete the Category
$category->delete();
//Session Message
session()->flash('Success', 'Categorie: ' . $category->name . ' is removed');
return json_encode(['Success' => 'Categorie: ' . $category->name . ' is
removed']);
}
答案 0 :(得分:0)
与GET请求不同,laravel中的POST / PUT / DELETE / CREATE请求要求您在请求中传递CSRF令牌 - 这是419错误的最常见原因:
$.ajax({
...
data: {
'_token': '{{ csrf_token() }}'
...
}
});
或者,您可以在所有请求的标题中设置它:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
如果此Javascript代码不在刀片中,您可以将其转储到刀片中的某个位置,可能是<meta>
标记并通过jQuery访问它:
<meta name="csrf_token" content="{{ csrf_token() }}">
var token = $('meta[name="csrf_token"]').attr('content');
最后一个选项,我不建议在app\Http\Middleware\VerifyCsrfToken
中禁用对此路线的检查:
protected $except = [
'deleteCateogory'
];