猿问

axios 发送的请求被 Laravel 运行了两次

所以我想使用 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方法,我做了一些谷歌研究,它无法关闭以及其他一些处理它的方法,仍然没有。

蓝山帝景
浏览 131回答 1
1回答

牛魔王的故事

当您使用 CORS 时,浏览器可能需要在OPTIONS请求之前发送GET请求。(如果是这样,它会在您发出GETwith&nbsp;XMLHttpRequest/&nbsp;fetch/etc 时自动执行。)您需要区分OPTIONS请求和GET服务器端的请求,并且仅在您获得 时才实际执行工作GET,而不是在您获得OPTIONS之前.旁注:Access-Control-Allow-Origin是一个响应头。您不应该告诉通过请求axios发送它(这样做不会做任何事情)。更多关于这里...
随时随地看视频慕课网APP
我要回答