Javascript 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['

因此,我想使用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['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,