关于jsonp跨域数据访问的设置
如果端口和主机对于两个页面是相同的,则两个页面具有相同的源,否则就是不同源的。
利用< script >元素的开放策略,网页可以得到从其他来源动态产生的JSON资料,而这种使用模式就是所谓的JSONP。用JSONP抓到的资料并不是JSON,而是任意的JavaScript。
重点是dataType,这个参数必须要设置成jsonp,指定服务器返回的数据类型为jsonp格式
$.ajax({
url: "http://localhost:8080/navigation",
type: "GET",
async: false,
dataType: "jsonp", //指定服务器返回的数据类型
jsonp:"callback", //Jquery生成验证参数的名称
success: function (result) {
console.log(result);
}
});
后端
前端注意与后端沟通约定jsonp的值,这个我看都是用默认callback。
将接收的的验证参数callback与实际要返回的json数据按“callback(json)”的方式构造。
@ResponseBody
@RequestMapping("/navigation")
public String getMySeatSuccess(@RequestParam("callback") String callback){
Setting setting=new Setting();
Map<String,String> map=new HashMap<>();
map.put("set","newest");
// logger.info(callback);
return callback+"("+setting.toJson(map)+")";
}
jQuery ajax方式以jsonp类型发起跨域请求,其原理跟< script >脚本请求一样,因此使用jsonp时也只能使用GET方式发起跨域请求。跨域请求需要服务端配合,设置callback,才能完成跨域请求。