什么是jsonp?
Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料。
为什么要用jsonp?
首先基于安全的原因,浏览器是存在同源策略这个机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。所以如果 “A应用” 访问到 “B应用” 获取数据就要用到jsonp,这就是跨域访问。下面是以JQuery作前台,java后台做事例。
注意:A应用和B应用你都必须可以修改源码才可以实施。因为B应用要接收A应用发送的jsonp参数并返回才能成功。
如何用jsonp?
用JQuery获取jsonp
$.ajax({ type : "get", //提交方式为get async:false, url : 'http://b.com/web/Login.action?usercode=abc&password=123', //直接访问b应用服务器端login方法 dataType : "jsonp",//数据类型必须为jsonp jsonp: "jsonpCallback",//b应用服务端用于接收callback调用的function名的参数 success : function(msg) { alert(msg.result); }, error : function() { alert('系统繁忙,请稍后再试'); } });
java服务器端
public void Login() throws IOException{ boolean isTrue = true; String result= ""; //设置输出信息的格式及字符集 super.getResponse().setContentType("html; charset=UTF-8"); super.getResponse().setHeader("Cache-Control", "no-cache"); //创建输出流对象 PrintWriter out = ServletActionContext.getResponse().getWriter(); String usercode= ServletActionContext.getRequest().getParameter("usercode");//获取用户名 String password= ServletActionContext.getRequest().getParameter("password");//获取密码 //个人登陆 ucapUser user = getService().findPerUserByUsercode(usercode,password); if (user == null) { result= "登录失败!"; }else{ result= "登录成功!"; } String jsonpCallback = ServletActionContext.getRequest().getParameter("jsonpCallback");//A应用客户端请求参数 out.println(jsonpCallback+"({\"result\":\""+result+"\"})");//返回jsonp格式数据,jsonpCallback(json格式) out.flush(); out.close(); }
转载请注明:努力奋斗 » JQuery+jsonp跨域访问java服务器端