ajax跨域请求成功,查看浏览器响应数据也已经得到,但是ajax只走error不走success

原本使用HtppClicent类去做的跨域处理 , 但是我自己的HttpClicent工具类写的不是很完善 , 重载了三类方法:参数只有url , 参数为url+请求参数 , 参数为 url+请求参数+请求头 , 虽然我的请求参数使用Map<Strting,Object> , 但是这个Object去没有考虑传入参数为数组或者集合的情况 , 所以在今天做批量的文件上传时,应为工具类不能正常处理文件数组  ,所以使用了mvc去配置跨域 , 刚开始就想着为了开发方便,配置允许所有请求跨域,具体配置如下:

<mvc:cors>
  <mapping path = "/*" />
<mvc:cors>

 启动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中的配置...

<mvc:cros >

  <mapping path = "/*">

<mvc:cros/>  

... /*   是/*   ,醉了 , 这个/*是可以跨域的,但是ajax是获取不到响应头的... 

改为/** , 一切正常... 特发此文纪警示:写代码是一件很认真很认真的事...

猜你喜欢

转载自www.cnblogs.com/xinShengDaiCaiNiao/p/12381510.html