JSONP原理探究
来源:互联网 发布:农村淘宝面试题目 编辑:程序博客网 时间:2024/06/01 23:10
介绍
JSONP是一直种解决跨域问题的方案,实现的原理来自于页面中的<script>
标签能够跨域请求资源。要通过JSONP实现跨域,需要服务器端做额外支持。
前端代码
前端部分核心在于通过script标签的src告诉服务器端约定好的回调方法名
。代码如下
var callbackName = 'callbackFunc';window[callbackName] = function (response) { // 对返回的数据做后续处理 console.log(response)};var script = document.createElement('script');script.src = 'http://127.0.0.1:8080/sword-room/JSONPServlet?callback='+callbackName+'¶m=JSONP';document.body.appendChild(script);
后端代码
服务端部分主要为接收前端发送过来的请求参数,核心在于约定好的方法名
。代码如下
package com.demo;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/JSONPServlet")public class JSONPServlet extends HttpServlet { private static final long serialVersionUID = 1L; public JSONPServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求参数 String param = request.getParameter("param"); //跟前端部分约定好的方法名 String callback = request.getParameter("callback"); PrintWriter out = response.getWriter(); //返回JSON字符串 response.setContentType("text/javascript; charset=UTF-8"); String jsonData = "{a:1,b:2,param:'"+param+"'}"; out.print(callback+"("+jsonData+");"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
结果
下图为验证结果:
其它
1.前台部分jquery对jsonp的支持,只需设置dataType:"jsonp"
,样例如下
$.ajax({ url:"http://127.0.0.1:8080", dataType:"jsonp", data:{ userName:'管理员' }, success:function(data){ console.log(data) }});
2.后台Java部分可使用fastjson来实现返回数据
JSONPObject OBJ = new JSONPObject(); //jquery ajax jsonp默认的方法参数名为callback,可使用jsonpCallback:'newcallback'自定义 OBJ.setFunction(request.getParameter("callback")); //设置返回数据 OBJ.addParameter(result); this.writeToPage(response, OBJ);
3.跨域情况下一般都牵涉到权限问题,可通过SSO或者服务器端开放匿名访问权限解决,或者token也行
4.使用Nginx的代理功能来解决跨域问题也是很好的一种办法
阅读全文
0 0
- JSONP原理探究
- jsonp简单探究
- jsonp 原理
- JSONP原理
- jsonp原理
- JSONP原理
- jsonp原理
- jsonp原理
- jsonp原理
- jsonp原理
- jsonp原理
- JSONP原理
- Jsonp原理
- jsonp 原理
- JSONP原理
- jsonp原理
- JSONP 原理
- Jquery的Jsonp原理
- Log4Qt 使用笔记(一)
- 7-1 是否同一棵二叉搜索树(25 分)
- Shader内置函数
- Java的类、方法、属性(多态,继承,封装)
- java.lang.IllegalStateException: The specified child already has a parent
- JSONP原理探究
- windows&linux设置系统自动退出时间(无操作超时设置)
- RMQ静态区间最值查询
- C++中的常引用
- (转)正则表达式
- 第二章—C++简单程序设计(一)
- for循环和foreach循环的区别?
- Log4Qt 使用笔记(二)
- ios-app杀死状态下响应推送