在网上找到了这种方法:
$.ajax({
//请求类型,这里为POST type: 'POST', //你要请求的api的URL url: url , //是否使用缓存 cache:false, //数据类型,这里我用的是json dataType: "json", //必要的时候需要用JSON.stringify() 将JSON对象转换成字符串 data: JSON.strigify({key:value}), //data: {key:value}, //添加额外的请求头 headers : {'Access-Control-Allow-Origin':'*'}, //请求成功的回调函数 success: function(data){ //函数参数 "data" 为请求成功服务端返回的数据
},
});
但是提示:
Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.
已经在php代码里吧 Access-Control-Allow-Headers的值设置为*了,还是报错,有没有解决办法?
首先我们谈谈为什么会出现
preflight
问题,那是因为你的请求已经不是一个“简单请求”了,跨域问题中,常把复合特定条件的一些请求称为简单请求,而满足“简单请求”的条件是这样的:请求类型必须是
GET
,POST
,HEAD
三者中的一种请求头(Header)中仅可以包含:
Accept
Accept Language
Content Language
Last Event ID
Content Type:仅接受application/x-www-form-urlencoded,multipart/form-data,text/plain
你的问题是,显然,你增加了一个header
Access-Control-Allow-Origin
,导致请求变得“不简单”了。当请求不简单时,浏览器处于安全原因,会先发送一个所谓的preflight
请求,方法为OPTIONS
关于跨域的更多内容,推荐看构建public APIs与CORS
你的问题,我理解,去掉那个多余的
header
应该就好了