最近花了2天时间完整的看了一遍 jQuery 的API,其中 $.getJSON(url[, data][, callback]) 方法的跨域访问解释真心看的一头雾水,大家可以从这里感受一下:

http://hemin.cn/jq/jQuery.getJSON.html

http://www.w3school.com.cn/jquery/ajax_getjson.asp

跨域访问原理解释

由于JSON使用一种叫同源策略的安全访问模式,无论使用jQuery.get()、jQuery.ajax()还是$.getJSON()等方法,直接访问其他网站接口(即跨域访问)的请求都会被浏览器进行默认拦截(实际上对普通页面的访问也会被拦截),但是<script>标签的资源访问请求则是允许跨域的,因此为了适应跨网站访问开放API接口数据的需求,诞生了利用<script>访问外网JSON数据接口的JSONP技术。

操作方式

假设需要访问的外网JSON数据接口URL为:http://wavky.com/api/helloWorld

取得的JSON数据格式为:

{"physicalAddress":"广州市电信192.168.1.1","status":"OK!!!","timestamp":"A.D. 2014-12-23 21:58:51:921","yourIP":"192.168.1.1"}

按照JSONP技术要求进行改造(需要服务端配合):

1、上面的访问URL改为: "http://wavky.com/api/helloWorld?jsoncallback=?"  (即增加一个自定义参数 jsoncallback )

2、getJSON方法调用方式:

$.getJSON("http://wavky.com/api/helloWorld?jsoncallback=?", function(jsonObject){ // 对返回的json的处理代码 }); 

其中参数名 jsoncallback 可与服务端开发人员进行协商定义,参数值 ? 将由jQuery自动替换为后面定义的匿名function回调函数的内部名称

3、请求发出后,服务端接收到一个正常的JSON接口访问请求,包含一个参数 jsoncallback ,参数值为 callbackFunction233(假设值)

利用参数值 callbackFunction233 对正常返回的JSON字符串进行二次包裹,格式如下(注意包含小括号):

callbackFunction233(原json输出字符串)

如:

callbackFunction233({"physicalAddress":"广州市电信192.168.1.1","status":"OK!!!","timestamp":"A.D. 2014-12-23 21:58:51:921","yourIP":"192.168.1.1"})

4、前端页面中jQuery接收到上面的返回后,调用js解释器进行解析,执行callbackFunction233函数(即上面第2步调用 $.getJSON() 中第二个参数定义的function)并传入参数值{"physicalAddress":"广州市电信....."yourIP":"192.168.1.1"},此后在function中通过变量 jsonObject 进行访问操作,由此完成JSON跨域访问

jQuery.getJSON跨域访问的正确使用方式(史上最傻瓜式解释)的更多相关文章

  1. 关于JQuery Ajax 跨域 访问.net WebService

    关于这个 jQuery Ajax跨域访问 WebService 前天整了好几个小时没整明白 今天再看一下 结果突然就顿悟了 1.建一个空webApplication --添加--新建项--web服务( ...

  2. System.Web.Http.Cors配置跨域访问的两种方式

    System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...

  3. Jquery Ajax跨域访问

    一.同源策略 二.跨域的集中方法: 1.服务器端发送请求,服务器作为中继代理(此方法不理解) 2.iframe 3.script标签 通过动过动态生成script标签,并将src指向目标源的方式(im ...

  4. jQuery实现跨域访问

    示例: $.ajax({ url: url, crossDomain: true, async: false,dataType:"jsonp" }); 说明:$.ajax()有很多 ...

  5. ajax实现跨域访问的两种方式

    一.使用jsonp实现跨域请求 在前端开发这中你会发现,所有带src属性的标签都可以跨域访问其他服务器文件.jsonp实现的原理也是如此. 以jsonp的数据类型进行请求时,JQ会动态在页面中添加sc ...

  6. 解决Entity Framework查询匿名对象后的跨域访问的一种方式

    在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...

  7. 用 jQuery.getJSON() 跨域请求 JSON 数据

    $.getJSON()可以理解为特殊形式的$.ajax(),手册里的说明好复杂,这里只记录一下用到的跨域请求. 先说在同一域名下,js发送数据到php,php返回JSON数据: $.getJSON(' ...

  8. 【js跨域】js实现跨域访问的几种方式

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  9. WEX5中ajax跨域访问的几种方式

    1.使用jsonp方式 使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callba ...

随机推荐

  1. 记一次防火墙导致greenplum装机失败及定位修复过程

    一.问题现象 20180201:15:06:25:028653 gpinitsystem:sdw1-2:gpadmin-[INFO]:--------------------------------- ...

  2. python七类之列表元组

    列表 一.关键字:  list  lst = [ , , , , , , ,] lst = [1,2,3,4] 二.方法: 1.增加:​ . append( ) #追加​​​,添加元素进列表最后 ls ...

  3. hdu6370 并查集+dfs

    Werewolf Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  4. C++拷贝构造函数 的理解

    #include <iostream> using namespace std; //拷贝构造函数的理解 class Point { public: Point(); Point(int ...

  5. 贪心算法之Kruskal

    克鲁斯卡尔Kruskal算法同Prim算法一样,都是求最小生成树.Kruskal是不断的找最短边,加入集合,且不构成回路. 所以,我们可以给每个点定义一个集合,一边的起点和终点查看是否属于同一集合,如 ...

  6. DATAGUARD实施文档

    DATAGUARD实施文档 一.前期准备及备机安装: 通过获取到的主机信息规划备机数据库安装基础信息:(注:在安装备机时需要尽量保障与主机库信息一致,以下表格中的备机信息为根据主机信息规划的安装信息. ...

  7. HBase 是什么

    Apache HBase™ is the Hadoop database, a distributed, scalable, big data store. HBase 是 Hadoop databa ...

  8. Linux:如何获取打开文件和文件描述符数量

    一.linux的文件描述符 文件描述符(FD:file descriptors),也可以说是文件句柄,当某个程序打开文件时,内核返回相应的文件描述符,程序为了处理该文件必须引用此描述符.文件描述符是一 ...

  9. Redis进阶:数据持久化,安全,在PHP中使用

    一.redis数据持久化 由于redis是一个内存数据库,如果系统遇到致命问题需要关机或重启,内存中的数据就会丢失,这是生产环境所不能允许的.所以redis提供了数据持久化的能力. redis提供了两 ...

  10. request.getparameter() 获取中文出现乱码 问题

    http请求是以ISO-8859-1的编码来传送url的 如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送 如: 中 的UTF-8编码为:E4 B8 ...