原本使用HtppClicent类去做的跨域处理 , 但是我自己的HttpClicent工具类写的不是很完善 , 重载了三类方法:参数只有url , 参数为url+请求参数 , 参数为 url+请求参数+请求头 , 虽然我的请求参数使用Map , 但是这个Object去没有考虑传入参数为数组或者集合的情况 , 所以在今天做批量的文件上传时,应为工具类不能正常处理文件数组 ,所以使用了mvc去配置跨域 , 刚开始就想着为了开发方便,配置允许所有请求跨域,具体配置如下:
启动jetty没有任何报错,去页面刷新效果 , 结果ajax在执行完之后却直接执行error,不执行success,看一下控制台没有任何报错,在看一下浏览器的响应数据,数据也过来了 , 看一下后台数据库数据也更新了,就感觉懵了 ...
没有办法就在Controller中请求方法上使用了@ CrossOrigin注解 , 试了下 , 一切都正常了 ...
到这里就懵了 , @CrossOrigin注解可以,为什么配置不行,而且配置的后台是没有问题的 , 前端代码如下:
$.ajax({
type :"post",
async :false,
url :"http://****,
data : fd,
datatype:"json",
contentType : false,
processData : false,
success : function() {
window.location.href ="****"},
error:function(e) {
layer.msg("数据上传失败",{time:2000,icon:2,shift:6},function(){
console.log(e);
});
}
})
看半天没找到错误 , 突然发现自己有点南辕北辙了,既然@CrossOrigin是正常的,那么前端代码就没有问题才对,所以问题定在了mvc中跨域的配置 , 又想到浏览器控制台的报错,同源策略拒绝了访问,虽然跨域成功了,但是这个跨域一定是有问题的,看了一眼mvc中的配置...
... /* 是/* ,醉了 , 这个/*是可以跨域的,但是ajax是获取不到响应头的...
改为/** , 一切正常... 特发此文纪警示:写代码是一件很认真很认真的事...