java web支持jsonp的实现代码
跨域说明
跨域指请求和服务的域不一致,浏览器和H5的ajax请求有影响,而对服务端之间的http请求没有限制。
跨域是浏览器拦截了服务器端返回的相应,不是拦截了请求。
jsonp跨域请求处理
Jsonp(JSONwithPadding)是json的一种"使用模式",可以让网页从别的域名(网站)那获取资料,绕过同源策略(若地址里面的协议、域名和端口号均相同则属于同源),即跨域读取数据。
jsonp:利用script标签可以跨域,让服务器端返回可执行的Javascript函数,参数为要回发的数据。可看做带有回调函数的ajax请求。
js代码
$(function(){ /* //简写形式,效果相同 $.getJSON("http://app.example.com/base/json.do?sid=1494&busiId=101&jsonpCallback=?", function(data){ $("#showcontent").text("Result:"+data.result) }); */ $.ajax({ type:"get", async:false, url:"http:/XXX", dataType:"jsonp",//数据类型为jsonp jsonp:"jsonpCallback",//服务端用于接收callback调用的function名的参数 jsonpCallback:"自定义回调函数名" success:function(data){ alert(data.info) }, error:function(){ alert('fail'); } }); });
java后端处理代码
@ResponseBody @RequestMapping(value="/url",produces=MediaType.APPLICATION_JSON) publicStringtest( HttpServletRequestrequest, HttpServletResponseresponse)throwsException{ Stringresult=getResult(); response.setHeader("Pragma","no-cache"); response.setHeader("Cache-Control","private,no-cache,no-store,max-age=0"); response.setDateHeader("Expires",0); Stringstr=request.getParameter("jsonpCallback"); if(str==null||str.equals("")){ returnresult; }else{ returnstr+"("+result+")"; } }
CORS(协议跨域资源共享)(Cross-originresourcesharing)
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制详细介绍戳此
- Access-Control-Allow-Origin:*允许所有域名的脚本访问该资源
- Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS运行什么方式访问资源
- Access-Control-Expose-Headers:x-requested-with暴露的信息
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。