【JS】如何避免options请求?

我用vue-cli做一个后台,要跨域访问微信服务器,获取统计数据
【JS】如何避免options请求?

我用axios发送post请求,然后浏览器先发了一个options请求
【JS】如何避免options请求?

然后报错:
【JS】如何避免options请求?

然后,我看阮一峰的 跨域资源共享 CORS 详解,如果请求字段超出如下内容,就是非简单请求,浏览器就先发option试探服务器是否允许跨域。

(1) 请求方法是以下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

我这段代码发送的请求,为什么不是简单请求呢?
给个解决思路。

// 概况趋势

export function getweanalysisappiddailysummarytrend (accessToken, data) {

const url = `https://api.weixin.qq.com/datacube/getweanalysisappiddailysummarytrend?access_token=${accessToken}`

axios.post(url, data)

.then(res => {

console.log(res)

})

}

回答

默认情况下,axios将JavaScript对象序列化为JSON来发送,也就是说会使用 'application/json'作为Content-Type,变得“不简单”了,你可以用qs库来处理post的data

如果不是这个原因,那就检查有没有设置一些自定义的header

你用的时axios,你需要再引入一个qs.min.js
然后:

axios.post(url, Qs.stringify(data))

.then(res => {

console.log(res)

})

添加了 content-type:application/x-www-form-urlencoded,避免了options请求,微信服务器返回了正确的数据,状态码200,但是浏览器依旧不允许跨域,还是拿不到数据

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access

后来的解决方法是,用自己的服务器向微信post数据,再把微信结果返回客户端

以上是 【JS】如何避免options请求? 的全部内容, 来源链接: utcz.com/a/87084.html

回到顶部