zoukankan      html  css  js  c++  java
  • 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是获取不到响应头的... 

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

  • 相关阅读:
    让盘古分词支持最新的Lucene.Net 3.0.3
    Mac下配置GitTF来连接TFS2012
    基于Xcode4开发第一个iPhone程序:“Hello World”
    第二个iPhone应用程序:“Say Hello”
    基于MMSeg算法的中文分词类库
    为什么IDEA不推荐你使用@Autowired ?
    Spring Cloud Gateway自定义过滤器实战(观测断路器状态变化)
    Spring Cloud Gateway实战之五:内置filter
    Spring Cloud Gateway过滤器精确控制异常返回(分析篇)
    Spring Cloud Gateway实战之四:内置predicate小结
  • 原文地址:https://www.cnblogs.com/xinShengDaiCaiNiao/p/12381510.html
Copyright © 2011-2022 走看看