jquery - $.ajax 跨域 options

查看:136
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆