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是獲取不到響應頭的... 

改為/** , 一切正常... 特發此文紀警示:寫代碼是一件很認真很認真的事...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM