1.jsonp跨域(只支持get请求)
$.ajax({
type: "get",
url: 'URL',
data: {
data: JSON.stringify(arr)
},
dataType: "jsonp",
callback: "callback",
beforeSend: function() {
$.showPreloader();
},
success: function(data) {
if(data.status == 'SUCCESS') {
$.alert('提交成功', function() {
window.location.href = 'URL';
});
}else{
$.alert('网络连接异常');
}
},
complete: function() {
$.hidePreloader();
}
});
通过jsonp可以简单处理跨域问题,我认为只要前端做出配合即可,但是存在一个问题,get请求会暴露URL上的传输参数,这样如果URL超过2KB,会导致request data 过大,无法正常与后端交互,这也只适应data数据少量的情况。
2.Tomcat配置跨域
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.修改响应头,即在后端的respone设置Http头。
@RequestMapping(value =
"batchSave")
@ResponseBody
public
Object acceptDataToSave(HttpServletRequest request, String data, HttpServletResponse response){
跨域的设置为蓝色背景
/**
* 采用下列方法解决post跨域问题
*/
response.addHeader("Access-Control-Allow-Origin",
"*");
response.addHeader("Access-Control-Allow-Methods",
"GET, POST, OPTIONS");
response.addHeader("Access-Control-Allow-Headers",
"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");
logger.info("begin
to accept data..........");
//用于返回前端的状态标示:SUCCESS为成功;FALSE为失败
String status =
"FALSE";
/*
业务逻辑
...................................
*/
Map<String,String> result =
new
HashMap<String,String>();
result.put("status",status);
return
result;
}