在web项目开发中,经常会遇到跨域的问题(何为跨域这里就不做解释了),百度搜索也有不少的解决方案(部分过于繁琐,未用到)。这里将自己的处理方式和大家分享下,希望能帮到大家。
(1)js端处理:通常是以ajax的方式,以下是处理代码
$.ajax({
type: "GET",
url: 'common/goBD.do',
xhrFields: {withCredentials: true },
crossDomain: true,
success: function(data){
window.open("http://www.baidu.com");
}
});
这里主要注意下该代码:xhrFields: {withCredentials: true },不可缺少;url是访问服务端地址,成功返回后跳转百度页面(新打开tab页,当然也可以在原有的页面上打开)。
(2)服务端处理:通过设置response头部信息的方式,以下是处理代码
@RequestMapping(value="/goBD")
public void goBD(HttpServletResponse response,HttpServletRequest request) throws IOException{
String msg = "";
String result = "{\"msg\":"+msg+"}";
PrintWriter out = response.getWriter();
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "0");
response.setCharacterEncoding("utf-8");
out = response.getWriter();
out.write(result);
out.flush();
out.close();
}
这里只是简单的处理了下response头部信息,并没有加入其他的,若有其他的判断如登录时可在js端带入用户名、密码进行判断处理,通过返回值在前端做出不同的处理。
好了,上面的不复杂,只是简单的跨域跳转的处理,很方便实用,亲测可用。