`
iluoxuan
  • 浏览: 583728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JSONP的例子和原理

    博客分类:
  • java
 
阅读更多

介绍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标签),这就可以实现通过调用站外程序对本地资源进行更改了。另外,通过<script> 标记的使用,就可从服务端直接返回可执行的JavaScript函数调用或者JSON数据。

 

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

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

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

 

 

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

 

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

test.jsp中的js代码:

 

js:

 

[java] view plaincopy
  1. <script type="text/javascript">    
  2.     function jsonpCallback(result){     
  3.        alert(result[1].name);     
  4.     }     
  5. </script>  
  6. <script type="text/javascript"src="http://localhost:8080/Jsonp/jsonp.jsp?callback=jsonpCallback"></script>  

 

 或jquery代码:

 

 

[javascript] view plaincopy
  1. <script type="text/javascript">     
  2.     $.getJSON("http://localhost:8080/Jsonp/jsonp.jsp?callback=?"function(json){      
  3.         alert(json[0].name);     
  4.     });     
  5. </script>  

 

 

jsonp.jsp代码:

 

[java] view plaincopy
  1. <%  
  2.      String callback = request.getParameter("callback");  
  3.      out.print(callback+"([ { name:'John',age:'19'},{ name:'joe',age:'20'}] );");  
  4.      out.print(callback);  
  5. %>  

 

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

分享到:
评论

相关推荐

    jsonp 使用例子

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了`&lt;script&gt;`标签可以跨域请求资源...随着现代浏览器对CORS的支持,JSONP的使用逐渐减少,但了解其原理和使用方式对于理解Web开发中的跨域问题仍然非常重要。

    本地实现的最简单jsonp例子.zip

    这个本地实现的最简单jsonp例子旨在帮助初学者更好地理解这一概念。 首先,我们要明确的是,JavaScript通常受到同源策略的限制,即只能访问与自身同源(协议、域名、端口相同)的资源。但`&lt;script&gt;`标签是个例外,...

    Ajax结合Jsonp实例

    在上面的例子中,Jquery会生成一个随机的回调函数名,如`_jsonp123456789`,然后将这个函数名作为参数传递给服务器,服务器返回的JavaScript代码就是`_jsonp123456789({json数据})`,这样就能在客户端执行并解析数据...

    java版 解决跨域问题CORS ajax+jsonp例子源代码.zip

    1. "jsonp能跨域即在服务器A上访问服务器B.txt" - 这个文件可能包含了关于JSONP如何实现跨域请求的基本原理和步骤,通过动态创建`&lt;script&gt;`标签来加载服务器B的数据,从而绕过同源策略。 2. "不管是否跨域,只要用...

    php版 解决跨域问题CORS ajax+get,post+jsonp例子源代码.zip

    JSONP的基本原理是利用`&lt;script&gt;`标签不受同源策略限制的特性,通过动态创建`&lt;script&gt;`标签来请求数据。服务器返回的不是JSON数据,而是包裹在函数调用中的JSON数据,例如: ```javascript callback({key: 'value'}...

    jsonp示例2则

    虽然JSONP在解决跨域问题上十分有效,但它也有一定的安全性和局限性。由于JSONP完全依赖于服务器返回的JavaScript代码,如果服务器被恶意篡改,可能会执行有害的脚本。此外,JSONP只能用于GET请求,无法处理POST、...

    跨域访问解决方法-jsonp

    跨域访问是Web开发中一个常见的挑战,尤其是在进行Ajax异步请求时,浏览器的同源策略(Same-origin policy)会限制JavaScript从一个源获取另一...理解JSONP的工作原理和使用方法对于任何Web开发者来说都是非常重要的。

    纯servlet实现JSONP

    在这个纯Servlet实现JSONP的例子中,我们将深入理解JSONP的工作原理,以及如何在Java的Servlet环境中实现这一功能。 首先,让我们了解JSONP的基本概念。JSON(JavaScript Object Notation)是一种轻量级的数据交换...

    jsonp的demo

    JSONP的基本原理是,服务器返回一个JavaScript函数调用,这个函数名由客户端通过参数传递,函数体内包含实际的数据。当浏览器接收到这个脚本时,会执行这个函数,将数据以参数的形式传入,从而实现了跨域数据交换。 ...

    httpclient-4.5 jar包 和 jsonp jar包

    JSONP的工作原理是通过动态插入`&lt;script&gt;`标签,利用其可以跨域加载资源的特点,将回调函数名与服务器返回的JSON数据包裹在一起。服务器端生成的数据格式为`callback({key: value})`,其中`callback`是客户端预先...

    JSONP 实例

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了HTML中`&lt;script&gt;`标签可以跨域请求...随着CORS(跨源资源共享)的普及,JSONP的重要性逐渐被CORS取代,但理解JSONP的工作原理对于前端开发者仍然很重要。

    仿百度jsonp写的历史记录和搜索框

    总的来说,仿百度的这个示例涵盖了前端数据交互、本地存储和用户体验优化等多个方面,是学习和实践JavaScript开发技能的好例子。在实际开发中,还可以结合现代前端框架如React、Vue等,进一步提升代码组织和复用性。

    JS 使用 JSONP 跨域获取用户IP

    首先,让我们来了解JSONP的基本原理。JSONP的核心是动态创建`&lt;script&gt;`标签,并设置其`src`属性指向提供JSONP服务的服务器端接口。服务器端接口会返回一个JavaScript函数调用,其中包含用户IP作为参数。例如: ```...

    jquery-jsonp-master.zip_jsonp

    首先,我们需要了解JSONP的基本原理。由于同源策略的限制,JavaScript通常不能直接向其他域名发送Ajax请求。然而,`&lt;script&gt;`标签不受此限制,可以加载任何源的JavaScript代码。JSONP利用这一点,服务器将数据封装在...

    Jsonp 跨域的原理以及Jquery的解决方案

    JSONP的工作原理可以简单概括为以下步骤: 1. **客户端**:在客户端(通常是网页)上,通过`&lt;script&gt;`标签向服务器发送请求。由于`&lt;script&gt;`标签没有同源策略限制,它可以加载任何源的JavaScript代码。 2. **动态...

    jsonp原理及使用

    **JSONP的工作原理:** 1. **请求发起**:当需要跨域获取数据时,客户端(通常是网页中的JavaScript)会创建一个新的`&lt;script&gt;`标签,并设置其`src`属性指向提供JSONP服务的服务器URL。URL中通常会包含一个名为`...

    深入分析JSONP跨域的原理

    下面我们将深入解析JSONP的原理和工作流程。 ### JSONP的起源与原理 同源策略是浏览器为保障用户数据安全而设置的一种机制,它限制了JavaScript只能访问与自身相同协议、域名和端口的资源。然而,随着Web应用的...

    ASPNET_JSONP_demo(jq跨域)

    首先,我们需要理解 JSONP 的工作原理。JSONP 是通过动态创建 `&lt;script&gt;` 标签来请求数据的,因为浏览器允许不同源的脚本加载。服务端返回的不是一个 JSON 数据,而是一个 JavaScript 函数调用,这个函数名由客户端...

    jsonp格式的数据处理实例源码

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了`&lt;script&gt;`标签可以跨域请求资源的特性,来实现...这个实例提供了从ASHX文件获取JSONP数据的具体操作方法,对于理解JSONP工作原理和实际应用非常有帮助。

    jsonp跨域请求数据实现手机号码查询实例分析.docx

    #### JSONP 的基本原理 JSONP 是一种跨域数据交互的方案,它利用了`&lt;script&gt;`标签不受同源策略限制的特点来实现跨域数据请求。其工作流程大致如下: 1. **客户端**发起一个HTTP请求,该请求包含一个回调函数名。 2. ...

Global site tag (gtag.js) - Google Analytics