Javascript axios发送的请求由Laravel运行两次
因此,我想使用axios从前端向Laravel发送请求,它是跨原点的,因此前端位于Javascript axios发送的请求由Laravel运行两次,javascript,php,reactjs,laravel,axios,Javascript,Php,Reactjs,Laravel,Axios,因此,我想使用axios从前端向Laravel发送请求,它是跨原点的,因此前端位于localhost:3000,后端位于localhost:8000/api 在Laravel中,我已经应用了CORS中间件。在axios中,我已经设置了标题 axios设置 axios.defaults.baseURL = API_URL axios.defaults.headers.common.Accept = 'application/json' axios.defaults.headers.common['
localhost:3000
,后端位于localhost:8000/api
在Laravel中,我已经应用了CORS中间件。在axios中,我已经设置了标题
axios设置
axios.defaults.baseURL = API_URL
axios.defaults.headers.common.Accept = 'application/json'
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'
axios.defaults.headers.common['Access-Control-Allow-Origin'] = '*'
axios发布和删除:
function create(){
return dispatch => {
return new Promise((resolve,reject)=>{
HTTP.get('/post/category/create')
.then((data)=>{
return resolve(data.data.data)
}).catch((data)=>{
return reject(data)
})
})
}
}
export function destroy(data){
return dispatch => {
return new Promise((resolve,reject)=>{
HTTP.delete(`/post/category/${data}`)
.then((data)=>{
return resolve(data.data)
}).catch((data)=>{
return reject(data)
})
})
}
}
如何调用函数:
var SubmitCategory = async (e) => {
e.preventDefault();
var formData = new FormData(e.target)
await setSubmit(true);
await props.dispatch(insert(formData))
.then(data=>{
toaster(data.message,data.status)
props.history.replace({
pathname: `/post/category`
})
})
.catch(data=>{
toaster(data.message,"error")
setError(data)
})
await setSubmit(false)
}
<form autoComplete="off" onSubmit={e=>SubmitCategory(e)}> <<--- onSubmit
...////
每个方法都会发生这种情况,因此当我创建某个对象时,它将创建两条记录,当我删除某个对象时,第一个对象将被成功删除,而第二个不需要的请求将失败(因为它已被删除)
我的第一个想法是axios发送了两个请求,其中一个是OPTIONS
method,我在谷歌做了一些无法使用的研究,还有一些其他的处理方法,但仍然一无所获
编辑cors.php文件
<?php
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 600,
'supports_credentials' => false,
使用CORS时,浏览器可能需要在获取
请求之前发送选项
请求。(如果是这样,当您使用XMLHttpRequest
/fetch
/等发出GET
请求时,它会自动执行此操作)。您需要在服务器端区分选项
请求和GET
请求,并且只有在获得GET
请求时才实际执行此操作,如果前面有选项
,则不会
旁注:访问控制允许原点
是一个响应标题。您不应该告诉axios随请求一起发送它(这样做没有任何作用) 使用CORS时,浏览器可能需要在GET
请求之前发送OPTIONS
请求。(如果是这样,当您使用XMLHttpRequest
/fetch
/等发出GET
请求时,它会自动执行此操作)。您需要在服务器端区分选项
请求和GET
请求,并且只有在获得GET
请求时才实际执行此操作,如果前面有选项
,则不会
旁注:访问控制允许原点
是一个响应标题。您不应该告诉axios随请求一起发送它(这样做没有任何作用) GET
方法很好,但是运行两次的是POST
和DELETE
方法,如果有帮助的话,我添加了cors.php
文件。那么我需要改变什么呢?我很抱歉,如果我的问题看起来很奇怪,这是我第一次在不同的领域使用frontend和backendcors@Asary-这是同样基本的事情(我很高兴你说这是发布
和删除
,为获取
做选项
有点奇怪——有时需要,但通常不需要). 您需要告诉Laravel处理选项
。(我不使用Laravel,所以我不知道具体是怎么做的。)所以我做了,我创建了一个中间件,这样任何OPTIONS
方法都会返回一个空的200响应,我不知道这是否是最佳实践,但它现在起作用了,就目前而言。谢谢在生产环境中,OPTIONS
方法应该在web服务器(例如Nginx)中处理和终止,以便这些请求不会到达PHP引擎。GET
方法很好,但是运行两次的是POST
和DELETE
方法,如果有帮助的话,我添加了cors.php
文件。那么我需要改变什么呢?我很抱歉,如果我的问题看起来很奇怪,这是我第一次在不同的领域使用frontend和backendcors@Asary-这是同样基本的事情(我很高兴你说这是发布
和删除
,为获取
做选项
有点奇怪——有时需要,但通常不需要). 您需要告诉Laravel处理选项
。(我不使用Laravel,所以我不知道具体是怎么做的。)所以我做了,我创建了一个中间件,这样任何OPTIONS
方法都会返回一个空的200响应,我不知道这是否是最佳实践,但它现在起作用了,就目前而言。谢谢在生产环境中,应在web服务器(例如Nginx)中处理和终止OPTIONS
方法,以便这些请求不会到达PHP引擎。面对相同的问题,您找到了解决方案吗?面对相同的问题,您找到了解决方案吗?
<?php
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 600,
'supports_credentials' => false,