`

JSONP

 
阅读更多

JSON来传数据,靠JSONP来跨域。打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式。看到没?一个是描述信息的格式,一个是信息传递双方约定的方法。

  1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;

  2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>);

  3、于是可以判断,当前阶段如果想通过纯web端(ActiveX控件、服务端代理、属于未来的HTML5之Websocket等方式不算)跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;

  4、恰巧我们已经知道有一种叫做JSON的纯字符数据格式可以简洁的描述复杂数据,更妙的是JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据;

  5、这样子解决方案就呼之欲出了,web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。

  6、客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。

  7、为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

 

$.ajax({ // get pagedata
            type : "post",
            url : treasureBaseURL2,
            dataType : "jsonp",
            data : {productId : 123, userMobile : '12324'},
            jsonp : "callback",
            jsonpCallback : "jsonpCallback",
            success : function(data) {
                var object = eval(data[0].result);
                $(object).each(function(index) {
                    alert(object[index].treasureCode);
                });
            },
            error : function() {
                alert('Error');
            }
        });

 或

 

 

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  
<script type="text/javascript">  
    function jsonpCallback(result) {  
        alert(result);
    }  
    var JSONP=document.createElement("script");  
    JSONP.type="text/javascript";  
    JSONP.src="http://crossdomain.com/services.jsp?callback=jsonpCallback";  
    document.getElementsByTagName("head")[0].appendChild(JSONP);  
</script> 

 或

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  
<script type="text/javascript">  
    function jsonpCallback(result) {  
        alert(result.a);  
        alert(result.b);  
        alert(result.c);  
        for(var i in result) {  
            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
        }  
    }  
</script>  
<script type="text/javascript" src="http://crossdomain.com/services.jsp?callback=jsonpCallback"></script>  

 JavaScript的链接,必须在function的下面。

 

 

jsp处理:

 

<%  
     String callback = request.getParameter("callback");  
     out.print(callback+"([ { name:'John',age:'19'},{ name:'joe',age:'20'}] );");  
     out.print(callback);  
%> 

 

 

分享到:
评论

相关推荐

    json和jsonp数据格式返回

    JSON(JavaScript Object Notation)和JSONP(JSON with Padding)是两种常见的数据交换格式,尤其在Web开发中广泛使用。本文将深入探讨这两种格式的特点、用途以及它们在跨域数据请求中的作用。 **1. JSON简介** ...

    JSONP解决跨域问题

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了`&lt;script&gt;`标签可以跨域请求资源的特性,为了解决JavaScript在浏览器端由于同源策略限制无法直接访问不同源的HTTP请求的问题。在本场景中,前端使用...

    Ajax跨域请求解决方案-JSONP

    然而,Ajax技术在实现动态网页交互时常常需要跨越这个限制,这时就引入了JSONP(JSON with Padding)作为跨域请求的一种解决方案。本文将详细介绍JSONP的工作原理以及如何在ASP.NET网站开发中应用JSONP解决Ajax跨域...

    详解如何在Vue项目中发送jsonp请求

    在页面a中由前端发送一个jsonp请求到客户方,得到一个token值 前端得到token值后向自己后端发送一个请求,后端根据token去redis(token的值就是redis里的key)里取值(key=token的值,value=用户信息等)判断用户是否已...

    jsonp示例2则

    在本示例中,我们将深入探讨JSONP的工作原理,以及如何使用Python来实现JSONP服务。 **JSONP的原理** JSONP的核心思想是通过动态插入`&lt;script&gt;`标签,其`src`属性指向提供数据的服务端URL。服务端返回的不是标准的...

    使用JSONP完成HTTP和HTTPS之间的跨域访问

    - **JSONP**:一种允许从一个域加载另一个域中的脚本的技术,它通过动态创建`&lt;script&gt;`标签并插入到DOM中来实现。 - **跨域限制**:浏览器的安全策略之一,限制了从一个源加载的脚本获取或设置另一个源上的资源的...

    JSONP简单调用实例

    JSONP简单调用实例。ASP.NET和纯HTML。jQuery的$.ajax的调用!jsonP说白了,就是在json字符串外面包上一个:参数名称+左右括弧!只是包了个:jsonpCallback() 而已! 相关文章:...

    纯servlet实现JSONP

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

    jsonp原理.txt

    ### JSONP原理详解 #### 一、什么是JSONP? JSONP(JSON with Padding)是一种用于解决浏览器同源策略限制的方法,允许网页从不同域名的服务器上加载数据。它利用了`&lt;script&gt;`标签不受同源策略限制的特点来实现...

    跨域访问解决方法-jsonp

    为了解决这个问题,开发者通常采用JSONP(JSON with Padding)技术。本文将详细探讨JSONP的工作原理以及如何在实际项目中使用它来跨域获取JSON数据。 ### JSONP简介 JSONP全称为"JSON Padding",它并不是JSON的一...

    Ajax结合Jsonp实例

    **Ajax与Jsonp结合在Jquery中的应用** Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个网页的情况下,与服务器进行数据交互,提升用户体验。而Jsonp(JSON with Padding)是解决浏览器同源策略...

    html通过 ajax jsonp跨域请求接收和传送数据

    2. **JSONP跨域**: JSONP的工作方式不同,它不依赖于XMLHttpRequest对象。首先,客户端在HTML页面中定义一个全局函数,如`handleData(data)`。然后,创建一个`&lt;script&gt;`标签,将`src`属性设置为服务器的URL,URL中...

    js跨域jsonp的使用

    然而,为了实现数据交互,开发者们找到了一种名为JSONP(JSON with Padding)的解决方案。本文将深入讲解JSONP的原理及其在解决跨域问题中的应用。 ### JSONP 原理 JSONP 的全称是“JSON with Padding”,它并非一...

    Jsonp+asp.net

    在标题"Jsonp+asp.net"中,我们可以理解为这个项目或教程是关于如何在ASP.NET环境下使用JSONP与前端交互数据的。ASP.NET是微软开发的一种Web应用程序框架,它提供了丰富的功能和工具来构建动态网站、Web应用和服务。...

    Jsonp和java操作

    JSONP (JSON with Padding) 是一种跨域数据交互协议,主要应用于JavaScript中,用来解决浏览器的同源策略(SOP)限制。同源策略限制了JavaScript只能与相同协议、相同域名、相同端口的源进行交互,但JSONP巧妙地利用...

    利用JQuery jsonp实现Ajax跨域请求json数据

    但为了实现数据交互,开发者常使用JSONP(JSON with Padding)这一技术来规避同源策略,实现在客户端跨域获取JSON数据。本篇文章将详细讲解如何利用jQuery的jsonp方法实现Ajax跨域请求,以及如何在服务器端使用.Net...

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

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了`&lt;script&gt;`标签可以跨域请求资源的特性来实现数据的交换。这个本地实现的最简单jsonp例子旨在帮助初学者更好地理解这一概念。 首先,我们要明确的是,...

    jsonp源码以及jar包

    JSONP(JSON with Padding)是一种跨域数据交互协议,它的基本思想是利用JavaScript函数调用的特性,将数据封装在函数调用中,从而绕过浏览器的同源策略限制。在网页开发中,如果你需要从一个不同的域名下获取数据,...

    Asp.net MVC3 实现JSONP

    ASP.NET MVC3 实现 JSONP 是为了克服浏览器的同源策略限制,允许跨域数据交互。JSONP(JSON with Padding)是一种非标准但广泛接受的数据交换格式,它通过动态插入 `&lt;script&gt;` 标签来规避同源策略。下面将详细介绍...

Global site tag (gtag.js) - Google Analytics