• 何为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);

     图解如下:

  • 相关阅读:
    PHP $_SERVER变量
    Buddy system伙伴分配器实现
    Linux iconv使用
    内存管理(memory allocation内存分配)
    内存碎片
    《STL源码剖析》chapter2空间配置器allocator
    Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
    c++ explicit
    《STL源码剖析》环境配置
    C++ STL的各种实现版本
  • 原文地址:https://www.cnblogs.com/ghhlyy/p/2760889.html
Copyright © 2020-2023  润新知