参考资料
JSONP 跨域原理及实现 - JavaScript进阶之路 - SegmentFault 思否
定义
解决跨域的一种方法
jsonp本质上是使用了浏览器不会限制script标签source属性的访问,故可以让服务器将响应封装到js代码里返回
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @WebServlet("/jsonp") public class JsonpServlet extends HttpServlet { private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/javascript"); String callback = request.getParameter("callback"); String jsonData = "{\"name\":\"张三\",\"age\":25,\"message\":\"这是JSONP响应数据\"}"; String jsonpResponse = callback + "(" + jsonData + ")"; response.getWriter().print(jsonpResponse); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>简单JSONP示例</title> </head> <body> <script> function handleResponse(data) { console.log("收到JSONP响应:"); console.log("姓名: " + data.name); console.log("年龄: " + data.age); console.log("消息: " + data.message); alert("收到数据: " + data.name); } </script> <script> var script = document.createElement('script'); script.src = 'http://localhost:8080/jsonp?callback=handleResponse'; document.body.appendChild(script); </script> </body> </html>
|