jquery - $.ajax 跨域 options
本文介绍了jquery - $.ajax 跨域 options的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
遇到一个很怪异的问题, 跨域请求的时候, 使用 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
上讲解的预请求,非默认允许的情况下是会产生一次预请求的,要和服务端有默契才行。
For cross-domain requests, setting the content type to anything other than application/x-www-form-urlencoded, multipart/form-data, or text/plain will trigger the browser to send a preflight OPTIONS request to the server.
希望以上回答可以帮你找到问题并且解决问题。
更新:
按照你给的参数设置不会发起OPTIONS
预请求的,只是因为withCredentials: true
需要服务端需要设置一个Access-Control-Allow-Credentials: true
什么时候发起预请求?预请求
这篇关于jquery - $.ajax 跨域 options的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文