POST http://127.0.0.1:8000/admin/upload/services 419(未知状态)CSRF 令牌不匹配
即使它有csrf令牌,它仍然有错误419(未知状态)CSRF令牌不匹配 ................................
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
/* Upload file */
$("#upload").change(function(){
const form = new FormData();
console.log($(this)[0].files[0]);
form.append('file', $(this)[0].files[0]);
$.ajax({
url: '/admin/upload/services',
processData: false,
contentType: false,
type: 'POST',
dataType: 'JSON',
data: form,
success: function(results){
if(results.error == false){
$("#image_show").html(
`
<a href="${results.urlFile}" target="_blank">
<img src="${results.urlFile}" width="100px">
</a>
`);
$("#thumb").val(results.urlFile);
}
else{
alert(results.messageError);
}
}
});
});
添加.blade.php
@extends('admin.layout.main')
@section('header')
<script src="/ckeditor/ckeditor.js"></script>
@endsection
@section('content')
<form action="{{ route('product.store') }}" method="POST">
@csrf
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="menu">Tên Sản Phẩm</label>
<input type="text" name="name" value="{{ old('name') }}" class="form-control" placeholder="Nhập tên sản phẩm">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Danh Mục</label>
<select class="form-control" name="menu_id">
<option value=""></option>
{!! App\Helpers\Helper::recursiveSelectMenu($menus) !!}
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="menu">Giá Gốc</label>
<input type="number" name="price" value="{{ old('price') }}" class="form-control" >
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="menu">Giá Giảm</label>
<input type="number" name="price_sale" value="{{ old('price_sale') }}" class="form-control" >
</div>
</div>
</div>
<div class="form-group">
<label>Mô Tả </label>
<textarea name="description" class="form-control">{{ old('description') }}</textarea>
</div>
<div class="form-group">
<label>Mô Tả Chi Tiết</label>
<textarea name="content" id="content" class="form-control">{{ old('content') }}</textarea>
</div>
<div class="form-group">
<label for="menu">Ảnh Sản Phẩm</label>
<input type="file" class="form-control" name="file" id="upload">
<div id="image_show"></div>
<input type="hidden" name="thumb" id="thumb">
</div>
<div class="form-group">
<label>Kích Hoạt</label>
<div class="custom-control custom-radio">
<input class="custom-control-input" value="1" type="radio" id="active" name="active" checked="">
<label for="active" class="custom-control-label">Có</label>
</div>
<div class="custom-control custom-radio">
<input class="custom-control-input" value="0" type="radio" id="no_active" name="active" >
<label for="no_active" class="custom-control-label">Không</label>
</div>
</div>
</div>
<div class="card-footer">
<button type="submit" name="submit" class="btn btn-primary">Thêm Sản Phẩm</button>
</div>
</form>
@endsection
@section('footer')
<script>
CKEDITOR.replace('content');
</script>
@endsection
header.blade.php
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ $title }}</title>
<link rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<link rel="stylesheet" href="/template/admin_asset/plugins/fontawesome-free/css/all.min.css">
<link rel="stylesheet" href="/template/admin_asset/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
<link rel="stylesheet" href="/template/admin_asset/dist/css/adminlte.min.css?v=3.2.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.5.2/css/all.css">
<meta name="csrf-token" content="{{ csrf_token() }}">
@yield('header')
web.php
Route::middleware('auth')->group(function () {
Route::prefix('admin')->group(function () {
Route::post('/upload/services', [UploadController::class, 'store']);
});
});
有人知道问题所在吗?我被这个麻烦困扰了好几个小时
您可以尝试将令牌放入输入字段中:
form.append('_token', document.querySelector('meta[name=csrf-token]').content);