介绍JSONP之前,先简单的介绍一些JSON。JSON是JavaScript Object Notation的缩写,是一种轻量的、可读的基于文本的数据交换开放标准。源于JavsScript编程语言中对简单数据结构和关联数组的展示功能。它是仅含有数据对和简单括号结构的纯文本,因此可通过许多途径进行JSON消息的传递。

1. JSONP定义

JSONP是英文JSON with Padding的缩写,是一个非官方的协议。它允许在服务器端生成script tags返回至客户端,通过javascript callback的形式来实现站点访问。 JSONP是一种script tag的注入,将server返回的response添加到页面实现特定功能。

2.JSONP由来

要解释JSONP的来由,先要说一下浏览器的“同源策略(SOP:Same Origin Policy)”。 简而言之,就是浏览器限制脚本程序只能和同协议、同域名、同端口的脚本进行交互,这包括共享和传递变量等。cookie的传递也是遵从同样策略。这就造成一些涉及到多个服务器的应用在整合时一些麻烦。跨域访问的问题造成A站点的Ajax代码无法访问B站点的数据。

如何解决跨域访问呢?那就要借助浏览器的一个特性:尽管浏览器不允许页面中的脚本程序跨域读取数据,但却允许HTML引用跨域的资源,如图片,CSS和脚本程序。对于脚本程序的引用比较特殊,它被浏览器解析以后,就和本地的脚本程序别无二致且可立即进行解释并执行。如在B站点的一个js文件,一个简单的提示框:alert(“This is Victor!”);。在A站点引用这个js,这个脚本就会在B站点的应用中执行,显示一个alert信息。由于站外脚本的引用是通过script tag来实现的,而脚本程序又可通过DOM的方式可以对HTML页面的所有标签进行控制(包括动态的创建script标签),这就可以实现通过调用站外程序对本地资源进行更改了。另外,通过

3. JSONP原理与实现

首先在客户端注册一个callback, 然后把callback的名字传给服务器。此时,服务器先生成 JSON数据。然后以JavaScript 语法的方式,生成一个function, function名字就是传递上来的参数jsonp.

然后,将JSON数据直接以入参的方式,放置到function中,这样就生成了一段 js 语法的文档,返回给客户端。

最后,在客户端浏览器中解析script标签,并执行返回的JavaScript文档,此时数据作为参数,传入到了客户端预先定义好的回调函数里(动态执行回调函数) 。

其实 JSONP是个很简单的一个东西。主要是利用了 标签对javascript文档的动态解析来实现。(其实也可以用eval函数) 。

4.下面分别用js和jquery实现代码如下:

test.jsp中的js代码:

js:

function jsonpCallback(result){

alert(result[1].name);

}

或jquery代码:

$.getJSON("http://localhost:8080/Jsonp/jsonp.jsp?callback=?", function(json){

alert(json[0].name);

});

jsonp.jsp代码:

String callback = request.getParameter("callback");

out.print(callback+"([ { name:'John',age:'19'},{ name:'joe',age:'20'}] );");

out.print(callback);

%>

当然,后台可以用action或servlet等实现。

java jsonp_java结合使用Jsonp的例子相关推荐

  1. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程--基础知识 Java 多线程 -- synchronized关键字 java 多线程--一个定时调度的例子 java 多线程--quartz 定时调度的例子 ...

  2. java split 实现_PL/SQL实现JAVA中的split()方法的例子

    众所周知,java中为String类提供了split()字符串分割的方法,所以很容易将字符串以指定的符号分割为一个字符串数组.但是在pl/sql中并没有提供像java中的split()方法,所以要想在 ...

  3. Java遗传算法(GA)简单例子

    文章目录 前言 一.解决的函数 二.遗传和变异算子 1.交叉 2.变异 源代码 前言 Java遗传算法(GA)简单例子 采用的是实数编码 一.解决的函数 f(x) = x1²+x2²+x3² //计算 ...

  4. java logbook_关于java.util.NoSuchElementException错误的一则例子

    关于java.util.NoSuchElementException错误的一则例子 (2010-05-20 19:34:48) 标签: 杂谈 java.util.NoSuchElementExcept ...

  5. JAVA数据库应用的一个小例子

    自己随便写的,以炉石为背景,写一个参考用的小例子,先上SQL表: if OBJECT_ID('card_pool') is not null drop table card_pool; create ...

  6. java 23种设计模式及具体例子 收藏有时间慢慢看

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  7. java泛型 例子_关于 Java 泛型的一些有趣的例子

    有以下的代码: 1 try{2 ArrayList lstA = new ArrayList();3 ArrayList lstB = new ArrayList();4 5 //ArrayList ...

  8. 相对完善的Java通过JDBC操纵mysql的例子

    工具类: Code  1import java.sql.Connection;  2import java.sql.DriverManager;  3import java.sql.ResultSet ...

  9. Java笔记-JNI各种签名以及例子

    目录 基本概念 栗子说明 基本概念 在JNI中有很多函数某些参数都要使用签名,如下: 其中的sig就是签名: 签名是一种用参数个数和类型区分同名方法的手段,即解决方法重载问题. 其中要特别注意的是: ...

最新文章

  1. 1120. Friend Numbers (20)
  2. 【转】×××精确校验JS
  3. 功能性平台创新-农业大健康·杨建国:谋定都江堰精华灌区
  4. 中值滤波讲解-Matlab
  5. Java写入大字符串到oracle数据库_java程序如何提高oracle百万级数据的insert效率
  6. Python学习(四) —— 编码
  7. libevent源码分析:eventop
  8. POJ 1845 Sumdiv 【逆元】
  9. Hbase的基于快照的表修复
  10. miui9如何不自动杀进程,小米9怎么关闭自动更新 具体操作方法解析
  11. switch 语句的使用范围
  12. Retrofit2 详解和使用(一)
  13. 你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si 注意,每个字的拼音之间有一个空格
  14. 计算机方面的英语杂志,计算机类有哪些EI检索的英文期刊
  15. UVA 1001 Say Cheese(最短路)
  16. 牛客题解-------BC100: 直角三角形图案
  17. Android的历史
  18. 记入职一个星期(Java后端转Android游戏开发)
  19. 2022广航蓝桥杯选拔赛压轴题:取数博弈游戏
  20. UnityShader入门精要-透明效果

热门文章

  1. java 在界面上画一个时钟_编写程序显示一个时钟 - javaCoder的个人页面 - OSCHINA - 中文开源技术交流社区...
  2. 平顶山学院java实验室_重点学科(实验室)建设规划
  3. php一句话过狗,整理的最新WebSHell (php過狗一句話,過狗菜刀,2016過狗一句話,2016php免殺一句話)...
  4. 单片机控制两个步进电机画圆_51单片机控制两个步进电机
  5. IDEA 删除Module
  6. 如何搭建私密云存储之ownCloud
  7. linux运维、架构之路-Nginx服务
  8. 【CSON原创】HTML5字体动态粒子效果发布
  9. C# GC 垃圾回收机制原理
  10. C++ socket编程 实现服务端与客户端的通讯