一般ajax跨域请求:
解决方法1
getResponse().setHeader("Access-Control-Allow-Origin", "*");//允许跨域访问
解决方法2
$.ajax({
url:"http://192.168.1.52/cpsystem/upload/getJson.action?callback=?",
//
callback
为ajax自动传来的
type : 'get',
dataType : 'json',
async : false,
success : function(data) {
alert(data.c)
}
})
response.getWriter().write(
callback+"({\"c\":11,\"d\":22,})"); //
callback为ajax自动传来的 如;jQuery180003636442424110131_1474600184379
解决方法3:服务器转发
特殊情况:
如异步跨域上传文件并显示进度,
首先浏览器自动发OPTIONS请求进行响应头验证,后台对应方法最前加上以下代码让OPTION请求通过验证
String method = getRequest().getMethod();
if( method.equalsIgnoreCase("options") ){
getResponse().setHeader("Access-Control-Allow-Origin", "*");//允许跨域访问
getResponse().setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS");
return null; //只验证,不进行业务代码
}
//处理post请求代码
....
然后
浏览器再发实际的ajax 异步post文件请求,
后台的同一个方法对 post过来的文件进行保存,
同时response也要进行
setHeader("Access-Control-Allow-Origin", "*");//允许跨域访问
setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS");
总体模板
if( method.equalsIgnoreCase("options") ){
getResponse().setHeader("Access-Control-Allow-Origin", "*");//允许跨域访问
getResponse().setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS");
return null; //只验证,不进行业务代码,只要求响应头.(内容可以响应一个空的json)
}
//处理post请求,保存文件等代码
....
getResponse().setHeader("Access-Control-Allow-Origin", "*");//允许跨域访问
getResponse().setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS");