最近花了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跨域访问

最新文章

  1. Jmeter发送soap请求
  2. Android之ListView&amp;Json加载网络数据
  3. 深入理解PHP内核(四)概览-PHP脚本的执行
  4. JAVA 正则 Pattern 和 Matcher
  5. Netbackup磁带过期处理
  6. 配置opencv
  7. 【数据压缩】LZ78算法原理及实现
  8. leanote 信息栏显示笔记本和笔记类型
  9. gym102007 E
  10. Java反序列化修复方案
  11. stm32定时器PWM模式和输出比较模式
  12. xml根据属性去重。如csprj去重
  13. 例说hg(五)————创建repository
  14. 数组A - 财务管理
  15. K-medodis聚类算法MATLAB
  16. 杭电1023Train Problem II
  17. java事件练习!!
  18. 九度OJ 1333:考研海报 (区间操作)
  19. datatable导出到Word / Excel / PDF / HTML .NET
  20. python—networkx:依据图的权重绘图

热门文章

  1. SpringMVC+Mybatis框架搭建
  2. mysql日志管理#二进制日志详解
  3. python中string,time,datetime三者之间的转化
  4. 【JDBC】一、JDBC连接数据库
  5. 大数据de 2文章
  6. 【题解搬运】PAT_A1020 树的遍历
  7. JMeter学习笔记(九) 参数化3--User Defined Variables
  8. MySQL☞聚合函数/分组函数
  9. 常用模块(数据序列化 json、pickle、shelve)
  10. cocos2d-x的坐标和节点层级