网上有很多方法,总结下,字不重要,直接上代码(亲测没有任何问题):
前端代码:
//首先是万能的ajax方法
$.ajax({
url : "xxxxxxxxxxxx", //URL地址
type : "post", //请求方式 get 、post
data : {}, //传入后台的参数
dataType:"jsonp", //如果跨域,必须改成jsonp格式的对象
jsonp:"callback", //Jquery生成验证参数的名称,callback会传入后台
success : function(json){
if(json.code!==200){
alert(json.msg)
}else{
}
}
});
后台代码:
<!-- 添加JSONObject依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
//封装Ajax交互参数
public class ReturnResult{
/**
* @param msg 成功信息
* @return
*/
public static JSONObject SUCCESS(String msg){
JSONObject json=new JSONObject();
json.put("code",200);
json.put("msg",msg);
return json;
}
....
}
import com.alibaba.fastjson.JSONObject;
/**
* 测试代码1
* @param callback
* @return
* @throws Exception
*/
@RequestMapping(value = "getxxx", produces = "application/json;charset=UTF-8")
public Object getxxx(String callback){
JSONObject json = null;
//业务代码区
json = ReturnResult.SUCCESS("数据获取成功");
if(StringUtils.isBlank(callback)) { //代码编写完成后,在返回前判断callback是否为null
return json ; //如果为null,证明前端不需要jsonp格式的数据
}
//callback如果不为空,那么久证明前端是跨域请求,需要的是jsonp数据
//将对象转换成jsonp格式的对象
MappingJacksonValue mjv = new MappingJacksonValue(json);
mjv.setJsonpFunction(callback);
return mjv;
}
/**
* 测试代码2
* @param callback
* @return
* @throws Exception
*/
@RequestMapping(value = "getxxx", produces = "application/json;charset=UTF-8")
public Object getxxx(String callback) throws Exception {
JSONObject json = null;
//业务代码区
json = ReturnResult.SUCCESS("数据获取成功");
if (StringUtils.isBlank(callback)) {
return json;
}
String jsonp = callback + "(" + json.toString() + ")";
return jsonp;
}
后台代码2选1,这样就能解决前后端跨域请求的访问了,本人在ssm、ssh、springboot等上面都试过
原创文章如有转载,请注明出处,谢谢!