2013-03-28 50 views
2

我有不同的域兩種應用:foo.bar.combar.com 我嘗試從第一域第二發送請求。對於這一點,我添加了一個過濾器到域的web.xml:Spring MVC的解析POST跨域請求錯過參數

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
</filter> 

而對於它的作品,除了IE瀏覽器所有瀏覽器。 對於IE我已經添加了特殊條件的firt服務器OB JS:

if ($.browser.msie && window.XDomainRequest) { 
      var xdr = new XDomainRequest(); 
      xdr.open("POST", "http://bar.com/user/login"); 
      var loginParam = get param here; 
      var passParam = get param here; 
      xdr.send("login=" + loginParam + "&password=" + passParam); 
      xdr.onerror = function() { 
       alert('in error'); 
      }; 
      xdr.onload = function() { 
       alert(xdr.responseText); 
      } 
     } else { 
      //Simple AJAX request 
     } 
    }); 

在此之後,我已經得到了我的服務器過濾器的要求! 但是我沒有參數:登錄密碼他們錯過了。 我該怎麼辦?我如何在IE中執行跨域POST請求?

+0

您如何驗證登錄名/密碼未到達服務器?你可以做一個網絡跟蹤來查看實體HTTP請求中是否包含正文?另請閱讀以下文章以瞭解IE的XDomainRequest的限制:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – monsur 2013-03-28 15:00:43

+0

我有在IE控制檯中調試,這兩個params被正常地發送到服務器。比起,在Java應用程序中啓動了我的調試,並且在請求中沒有參數 – Andrew 2013-03-28 16:15:12

+0

您可以包含IE中請求的外觀快照嗎?另外,你從哪裏開始Java調試?在CORS過濾器之前,之中還是之後?在Java快照之前是否有任何過濾器或代碼運行? – monsur 2013-03-28 20:34:44

回答

0

我有類似的問題。原來,對於IE8/IE9,XDocumentRequest does not set the Content-Type header的請求。它默認爲text/plain

除非Content-Type設置爲application/x-www-form-urlencoded,否則服務器框架(如Spring MVC)不會綁定表單參數。所以你需要在服務器上自定義一些東西來綁定表單參數。