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是获取不到响应头的... 

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

  • 相关阅读:
    34.2 字节流 InputStreamReader OutputStreamWriter
    34.1 字符流-- FileRead FileWrite
    34 io流-- 打印流和对象流
    33.3 删除指定的目录(包含子目录)
    33.2 案例:输出指定目录下的所有java文件名(包含子目录)
    33.1 File 获取目录下的所有文件及子目录
    33 File 文件及目录操作
    32 递归
    31.3 自定义异常类 MyException
    31.2 try finally使用
  • 原文地址:https://www.cnblogs.com/xinShengDaiCaiNiao/p/12381510.html
Copyright © 2011-2022 走看看