JSON与JSONP
JSON
JSON:一种用于在浏览器和服务器之间交换信息的基于文本的轻量级数据格式。是JS对象的字符串表示。例如:‘{''name":"aa","age":28}',字符串必须用引号表示。
优点:
1.基于纯文本,跨平台传递简单。
2.Javascript原生支持,后台语言几乎全部支持。
3.轻量级数据格式,占用字符数量级少。
JSONP
JSON是传递数据的格式,而JSONP则是客户端与服务端数据交互的一种方式。简单的说就是用JSON来传数据,用JSONP来跨域。
JSONP出现背景
1.使用AJAX请求数据时会存在跨域问题。不管是请求什么类型的数据,只要不同域,而且服务端没有设置Access-Control-Allow-Origin头部信息的话,请求都会失败。
2.在web页面上调用JS文件不存在跨域问题。并且拥有“src”属性的标签都具有跨域的能力(比如<script>,<img>,<iframe>,<style>)。
3.所以综合以上,web客户端可以通过加载JS的方式来调用跨域服务端动态生成的JS格式文件(一般是以.JSON为后缀),后端动态生成的JS文件里,会把需要返回的数据以JSON的格式包裹到指定的回调函数里。
4.客户端在对JSON文件调用成功后,会执行指定的回调函数。这个时候可以按照自己的需求随意处理数据了。
JSONP要点
JSONP是一种非正式的传输协议,要点就是允许用户传递一个callback参数给服务端,服务端返回数据时,会将这个callback参数作为函数的名字来包裹JSON数据,传给客户端。客户端会根据自定义的回调函数来随意处理数据。
JSONP的实现
1.在html页面里定义好回调函数。此函数是返回数据后需要执行的操作。
cbGetAlbumListAd = function(cbdata){
console.log(cbdata);
document.getElementById('img').src = cbdata[0].imgUrl;
}
2.因为回调函数的名字是不固定的,所以需要通过参数传入,让后端动态生成名字。调用者通过传入一个参数告诉服务端“我需要调用XXX函数的JS代码”,服务端就按照这个参数值来生成JS脚本响应,并且把需要的数据以JSON的格式作为这个回调函数的参数传入。
<html>
<head>
<title>JSONP</title>
</head> <body>
<img id="img" /> <script type="text/javascript">
cbGetAlbumListAd = function(cbdata){
console.log(cbdata);
document.getElementById('img').src = cbdata[0].imgUrl;
} var JSONP = document.createElement('script');
JSONP.type = 'text/javascript';
JSONP.src = 'http://www.xxxx.com/blogPhotoAd?positionId=1&callback=cbGetAlbumListAd';
document.getElementsByTagName("head")[0].appendChild(JSONP);
</script>
</body>
</html>
补充:Ajax和JSONP的目的一样,都是请求一个URL,把服务器返回的数据进行处理。但是本质上是不同的。Ajax的核心是通过XmlHTTPRequest请求来获取数据,而JSONP是动态添加<script>标签来调用服务器提供的JS脚本。JSONP可以解决跨域问题,AJAX也可以通过服务器代理来解决跨域问题。
JSON与JSONP的更多相关文章
- json和jsonp的区别,ajax和jsonp的区别
json和jsonp虽然只有一个字母的区别,但是它们之间扯不上关系. json是一种轻量级的数据交换格式. jsonp是一种跨域数据交互协议. json的优点:(1)基于纯文本传递极其简单,(2)轻量 ...
- [转]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
本文转自:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两 ...
- JSON和JSONP (含jQuery实例)(share)
来源:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两个问 ...
- 【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可 ...
- json和jsonp(json是目的,jsonp是手段)
自己理解:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议.我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的" ...
- 用nodejs实现json和jsonp服务
一.JSON和JSONP JSONP的全称是JSON with Padding,由于同源策略的限制,XmlHttpRequest只允许请求当前源(协议,域名,端口)的资源.如果要进行跨域请求,我们可以 ...
- json 与jsonp 特点及区别
简单描述JSON跟JSONP的区别以及实战 什么是JSON? 前面简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点. JSON的优点 ...
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 分类: JavaScript 2014-09-23 10:41 218人阅读 评论(1) 收藏
前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Sock ...
- php返回json,xml,JSONP等格式的数据
php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...
- json和jsonp的使用格式
最近一直在看关于json和jsonp的区别和各自的用法.优缺点! 下面是我看到过解释最清楚的一片文章 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求 ...
随机推荐
- iOS支付宝集成时遇到的问题整理(2)
1.集成支付宝SDK编译报错#include<openssl/asn1.h>这一行 “openssl/asn1.h”file not found 解决方法:在BuildSetting 里 ...
- Effective Java 17 Design and document for inheritance or else prohibit it
Principles The class must document its self-use of overridable methods. A class may have to provide ...
- C# List与DataTable的相互转化
List与Data的转化比较简单,网上也很多.但是大多都有一个Bug:当实体类有可空类型的属性时,转化会出异常(DATASET不支持System.Nullable异常) 下面的方法可以避免出现这个问题 ...
- InfluxDB数据备份与恢复
数据备份与恢复 Example:(192.167.8.13 InfluxDB:DeviceHistory备份到192.167.8.52,然后恢复到该服务器上) steps: login 192 ...
- maven 的 pom.xml 文件报错:ArtifactTransferException: Failure to transfer
因为maven下载依赖jar包时,特别慢,所以取消了下载过程,再次打开eclipse时,maven的pom.xml文件报错如下: ArtifactTransferException: Failure ...
- which,whereis, locate, find
which 在PATH环境变量中的路径中查找目标文件,所以用来查找都是可执行文件,Linux下的各种命令本质上就是一个可执行的文件,所以我们安装新的软件之后通常都会有相应的命令将其打开,就是因为安装的 ...
- hyperstart 容器创建流程分析
hyperstart中运行的pod的核心数据结构如下所示: struct hyper_pod { struct hyper_interface *iface; struct hyper_route * ...
- 二分法 organ Saltless
organ [描述] 现在某组织中(记作R)有n个人,他们的联络网形成一棵以Saltless为根的树,有边相连代表两人可以直接联络. 每个人有一个代号,Saltless代号为1,且除Saltless外 ...
- Spring 一二事(5) - 依赖注入
<!-- 依赖注入的装配过程 --> <bean id="person" class="com.lee.spring007.di.xml.setter. ...
- Android系列----JUnit单元测试的使用
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...