处理跨域请求
后台:
@RequestMapping("/list2.do")
@ResponseBody
public Object list2(String callback) {
String str = studentService.getMessage();
JSONObject json = new JSONObject();
json.put("data", str);
String result=json.toJSONString();
if(callback!=null && !callback.equals("")){
MappingJacksonValue mappingJacksonValue=new MappingJacksonValue(result);
mappingJacksonValue.setJsonpFunction(callback);
return mappingJacksonValue;
}else{
return result;
}
}
@RequestMapping("/list3.do")
@ResponseBody
public String list3(String callback) {
String str = studentService.getMessage();
JSONObject json = new JSONObject();
json.put("data", str);
String result=json.toJSONString();
if(callback!=null && !callback.equals("")){
return callback +"("+result+")";
}else{
return result;
}
}
前端:
$.ajax({
data:'',
type:"get",
url:"http://www.xxxx.com/upms/user/list3.do",
dataType:'jsonp', //声明采用 jsonp
jsonp:'callback', //后台用 callback字符串接收。 jsonpCallback的回调函数callbackFunc的名称
jsonpCallback:"callbackFunc", //callbackFunc 回调的方法 可以不要
success:function(result) {
console.info(result);// 成功后携带数据进入。
},
timeout:3000
});
function callbackFunc(datas){}// 空实现 可以不要
原理
- 主要是服务器把返回数据包裹成 js文件内容。 因为js是可以跨域访问的。