目录
原文地址: http://www.cnblogs.com/JimmyBright/p/7681097.html
简单请求与非简单请求区别部分转载自:https://www.cnblogs.com/renpingsheng/p/7688134.html
出现原因
所有跨域的js在提交post请求的时候,如果服务端设置了可跨域访问
public static function setCrossDomain()
{
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT');
}
都会默认发送两次请求,第一次是预检请求,查询是否支持跨域,第二次才是真正的post提交。
JS中出现这个现象原因在于你发送了一个非简单请求。
简单请求与非简单请求:
* 请求方式:HEAD,GET,POST
* 请求头信息:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type 对应的值是以下三个中的任意一个
application/x-www-form-urlencoded
multipart/form-data
text/plain
只有同时满足以上两个条件时,才是简单请求,否则为非简单请求
解决方法:
由上面定义可以看出,把你的post提交改成get提交,就不会两次请求,或者将post的header改成application/x-www-form-urlencoded, multipart/form-data 或 text/plain中的一种
axios设置header信息
this.axios({
method: "POST",
url: `${API_HOST}/api/bind/index`,
data: obj,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).then(function(res) {
console.log(res);
});