2015-03-31 116 views
2

我有2个不同的java web项目运行在2个不同的tomcat服务器上。 可以说projA和projB 在这里,我想从projA加载projB中可用的html。我简单地使用jQuery.load()来实现这一点。但它给了我没有'访问控制 - 允许 - 来源'标题出现在请求的资源错误。我也试过在这里使用jQuery的跨域插件https://github.com/padolsey-archive/jquery.fn/tree/master/cross-domain-ajax如何使用jQuery加载跨域html

但是这并不奏效。 任何帮助将不胜感激。

代码我试图

$191('.ontop').load("http://"+host+":8080/OtherDomain/",function(response,status) 
{ 

    if (status == "error") 
    { 
     $191('.ontop').empty(); 
     var msg = "Sorry We could not connect to our server.. Please try again later."; 
     alert(msg); 
    } 
    else 
    { 
     alert(status); 
     $191('.ontop').css('display', 'block'); 
    } 
}); 
+0

您是否试过jsonp请求? – 2015-03-31 05:02:39

+0

基本上我不会调用任何后端API。它只是一个加载HTML位于不同的域。 – mahendrakawde 2015-03-31 05:07:59

+0

其浏览器的安全功能。你可以在你的projA上调用一个函数,然后使用CURL或任何其他服务器端方法从那里调用projB。 – 2015-03-31 05:17:02

回答

0

因此,这里是我得到的CORS错误回答:我加在我的web.xml

<filter> 
     <filter-name>myResponseFilter</filter-name> 
     <filter-class>com.filters.ResponseHeaderFilter</filter-class> 
     <async-supported>true</async-supported> 
    </filter> 


    <filter-mapping> 
     <filter-name>myResponseFilter</filter-name>  
     <url-pattern>*</url-pattern> 
    </filter-mapping> 

以下过滤

再有就是写入设置头自定义过滤器:

public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain filterChain) throws IOException, ServletException { 

     HttpServletRequest httpRequest = (HttpServletRequest) request; 
     HttpServletResponse httpResp = (HttpServletResponse) response;  

     String origin = httpRequest.getHeader("origin"); 
     origin = (origin == null) ? "*" : origin; 

     httpResp.setHeader("Access-Control-Allow-Origin", origin); 
     httpResp.setHeader("Access-Control-Allow-Methods", "GET, POST"); 
     httpResp.setHeader("Access-Control-Allow-Credentials", "true"); 
     httpResp.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type"); 
     httpResp.setHeader("Access-Control-Max-Age", "86400"); 

     filterChain.doFilter(request, response); 
    } 
0

您可能需要使用代理服务器来请求它。

我发现Here并构成本fiddle- http://jsfiddle.net/2kn52u3s/1

代码snippet-

设置AJAX包头中

$.ajaxSetup({ 
    scriptCharset: "utf-8", //maybe "ISO-8859-1" 
    contentType: "application/json; charset=utf-8" 
}); 

,然后请求跨域JSON请求原样

$.getJSON('http://whateverorigin.org/get?url=' + 
    encodeURIComponent('http://google.com') + '&callback=?', 
    function(data) { 
     $("#target").html(data.contents); 
}); 
+0

嗨manoz,我只是尝试了那个小提琴,在那里我用我的URL代替了encodeURIComponent('http://google.com'),如下所示 encodeURIComponent('localhost:8080/OtherDomain'),但它不显示div中的内容 – mahendrakawde 2015-03-31 05:15:16

+0

本地主机不会工作尝试活域 – 2015-03-31 05:17:56

+0

是的,它可以与活的域名,如facebook 工作但如果我想在本地主机 – mahendrakawde 2015-03-31 05:19:12