何为jsonP

     今天公司开会刚好看到冯经理给我们演示的jq的时候,偶尔瞥到公司项目中也有用到jsonP技术来解决跨域请求的问题,一时兴趣大增,幸好之前有过研究,这次就做一次简单的复习吧。刚好今天发现EF不同版本之间还是有许多的不一致的地方,导致今天在用vs2012+mvc4+EF进行项目框架搭建的时候,老是找不到之前在vs2010中常用的方法类库,因此重装vs2010,这是一个漫长的过程,够我写一下jsonP的技术要点了~~~

    JsonP是一个非官方的“协议”。主要用来跨域访问数据,使用的是服务器获得浏览器上的某个JS方法名称,并准备好Json数据,构造出一个调用js方法的js语法字符串。返回给浏览器。返回的数据因为是放在<script>标签里面,所以会被浏览器当做js代码来执行。这就达到了不同域名之间的跨域访问,

1:JsonP的用法一:

ajax异步对象只能访问本网站的资源,不能访问外部网站资源。例如:百度的网站创建的异步对象不能访问谷歌的相关资源。解决的方案:利用js的跨域性来解决:

      <script src="http://www.google.com.cn/GetData.ashx"></script>;

而script标签就是一段js代码。当被请求的网站的资源被当做字符串返回给当前网站,在当前网站的都被当做js代码执行,那么在当前页面的js里面访问的到了。这就是JsonP技术。

     1.1:在被请求的网站必须提供一个变量,如:context.Response.Write("var data="+jsonP);//jsonP表示你要请求的另一个服务器的上的数据以json的形式返回。

     1.2:在当前页面可以通过:alert(var data )即可获得这个json数据。

2:JsonP的用方法二:

      2.1:浏览器中js中有一个方法:function showHi(){alert("dd")};并通过URL传参的方式将方法名传递给服务端。

      2.2:在服务端通过:string funName=context.Response.QuerySring["方法名"]获得js中的方法名,再返回回去:context.Write(funName +"("+jsonP+")");//相当于执行:showHi(jsonP);

 图解如下:

posted @ 2012-11-08 18:36  肖&申&克  阅读(406)  评论(1编辑  收藏  举报