首先,IP+端口号 均不同,或者IP相同+端口号不同,这样的请求均属于跨域请求。
之前这篇博客jquery从后台获取json数据讲的是同域访问,如果本机要实现跨域访问,我们可以给后台传递一个参数例如:callback,
后台进行相应的处理,如下:
@RequestMapping(value="/rtnHotspot",produces={"application/json;charset=UTF-8"})
@ResponseBody
public Object rtnHotspot(@RequestParam("callback") String callback){
//从data_process表中获得数据
List<Data_process> data_processList = this.dataAnalysisService.findAllLocation();
List<Hotspot> hotspotList = new ArrayList<Hotspot>();
......
String function = callback+"("+JSON.toJSONString(hotspotList)+")";//后台返回一个callback(json字符串)这样的形式
return function;
}
注意:这里的@RequestMapping加上参数:produces={"application/json;charset=UTF-8"},否则前台获取数据时会出现乱码问题。
前台通过回调函数获得返回的json字符串,而其中的callback其实是一个jsonp。前台有一下几种方式实现跨域获取数据:
1,$.ajax dataType:json,这时须在URL中加上参数callback
$.ajax({
type:"GET",
url:"http://具体ip/项目名称/dataAnalysis/rtnHotspot?callback=?",//加一个参数callback=?
dataType:"json",
async: false,
success:function(data){
......//返回数据
}
});
2,$.getJSON
$.getJSON("http://localhost/xxx/dataAnalysis/rtnHotspot?callback=?",function(data){
myData = JSON.stringify(data);
alert(myData);
});
3,$.ajax dataType:
jsonp,URL中不用加参数
$.ajax({
type:"GET",
url:"http://localhost/xxx/dataAnalysis/rtnHotspot",//不用加参数
dataType:"jsonp",//jsonp类型
async: false,
success:function(data){
......
});