目前很多网站都要求前后端分离,因此ajax或者一些前端框架的http请求就必然面临跨域访问的问题,下面上几种解决方式
1、前端处理
如jquery的jsonp
jQuery(document).ready(function(){
$.ajax({
type : "GET",
url : "http://www.b.com/server.php&action=getmsg&callback=?",
dataType : "json",
jsonp: 'callback',
success : function(json){
$('#msg_box').html(json.msg);
return true;
}
});
});
此种方式需要在url后面加上callback=?参数
或者一些前端框架如agular自带的,等等
2、服务端处理
如java的springmvc加上注解
$.ajax({
type : "GET",
url : "http://www.b.com/server.php&action=getmsg&callback=?",
dataType : "json",
jsonp: 'callback',
success : function(json){
$('#msg_box').html(json.msg);
return true;
}
});
});
此种方式需要在url后面加上callback=?参数
或者一些前端框架如agular自带的,等等
2、服务端处理
如java的springmvc加上注解
@CrossOrigin(origins = "*", maxAge = 3600) 但是这种方式只能解决get请求的方式,post请求需要继承过滤器,添加头文件如下 public class PostFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletResponse response = (HttpServletResponse) resp; response.setHeader("Access-Control-Allow-Origin","*"); response.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,DELETE"); response.setHeader("Access-Control-Max-Age","3600"); response.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"); response.setHeader("","");response.setHeader("",""); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { } } php文件中添加头就可以了header('Access-Control-Allow-Origin:http://client.runoob.com');