遇到一个很怪异的问题, 跨域请求的时候, 使用 jquery的ajax()
方法发送 post
, 会在 post
请求前发送一个 OPTIONS
请求, 但是通过 直接通过 post()
方法请求就不会发送 OPTIONS
请求?有什么办法可以在 ajax
跨域请求时, 前端不发送 OPTIONS
请求, 或者不处理 OPTIONS
请求吗?
附录:
其中 ajax()
方法设置了这几个参数:
dataType: "json",
async: true,
data: {},
type: "POST",
cache: false,
xhrFields: {
withCredentials: true
},
crossDomain: true,
timeout: 20000,
而 post()
方法什么参数也没设置.
为什么你使用
$.ajax
和$.post
不一样,可以检查你的代码或者看请求头协议是不是有差别,$.ajax
有一个setting
。查看了一下
jquery
的文档,发现了一个可能导致你这个问题的原因。还是可以参考MDN
上讲解的预请求,非默认允许的情况下是会产生一次预请求的,要和服务端有默契才行。希望以上回答可以帮你找到问题并且解决问题。
更新:
按照你给的参数设置不会发起
OPTIONS
预请求的,只是因为withCredentials: true
需要服务端需要设置一个Access-Control-Allow-Credentials: true
什么时候发起预请求?预请求