什么是jsonp格式
什么是jsonp格式
什么是jsonp格式json相信大家都用的多,jsonp也经常看到,其功能主要是 “用来跨域的”
一、JSONP定义
JSONP是英文JSON with Padding的缩写,是一个非官方的协议。它允许在服务器端生成script tags返回至客户端,通过javascript callback的形式来实现站点访问。 JSONP是一种script tag的注入,将server返回的response添加到页面实现特定功能。
二、JSONP由来
要解释JSONP的来由,先要说一下浏览器的“同源策略(SOP:Same Origin Policy)”。 简而言之,就是浏览器限制脚本程序只能和同协议、同域名、同端口的脚本进行交互,这包括共享和传递变量等。cookie的传递也是遵从同样策略。这就造成一些涉及到多个服务器的应用在整合时一些麻烦。跨域访问的问题造成A站点的Ajax代码无法访问B站点的数据。
如何解决跨域访问呢?那就要借助浏览器的一个特性:尽管浏览器不允许页面中的脚本程序跨域读取数据,但却允许HTML引用跨域的资源,如图片,CSS和脚本程序。对于脚本程序的引用比较特殊,它被浏览器解析以后,就和本地的脚本程序别无二致且可立即进行解释并执行。如在B站点的一个js文件,一个简单的提示框:alert(“This is Victor!”);。在A站点引用这个js,这个脚本就会在B站点的应用中执行,显示一个alert信息。由于站外脚本的引用是通过script tag来实现的,而脚本程序又可通过DOM的方式可以对HTML页面的所有标签进行控制(包括动态的创建script标签),这就可以实现通过调用站外程序对本地资源进行更改了。另外,通过<script> 标记的使用,就可从服务端直接返回可执行的JavaScript函数调用或者JSON数据。
三、JSONP原理
1、首先在客户端注册一个callback, 然后把callback的名字传给服务器。此时,服务器先生成 JSON数据。然后以JavaScript 语法的方式,生成一个function, function名字就是传递上来的参数jsonp.
2、然后,将JSON数据直接以入参的方式,放置到function中,这样就生成了一段 js 语法的文档,返回给客户端。
3、最后,在客户端浏览器中解析script标签,并执行返回的JavaScript文档,此时数据作为参数,传入到了客户端预先定义好的回调函数里(动态执行回调函数) 。
四、JSONP的客户端具体实现
不管jQuery也好,extjs也罢,又或者是其他支持jsonp的框架,他们幕后所做的工作都是一样的。
(1)、新建一个lightResult.aspx的页面,用来生成一段这样的代码提供给jsonp.html(服务端的实现这里就不演示了,与你选用的语言无关,说到底就是拼接字符串),函数名jsonpHandler与调用时指定的回调函数名相同,如果没有指定,则默认的是callback:
jsonpHandler({
"code": "aaa",
"price": 1780,
"tickets": 5
});
(2)、利用jQuery如何实现jsonp调用
<!DOCTYPE>
<html>
<head>
<title>Untitled Page</title>
<script type="text/javascript" src=jquery.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
$.ajax({
type: "get",
async: false,
url: url?code=aaa,
dataType: "jsonp",
jsonpCallback:"jsonpHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
success: function(json){
alert('您查询到信息:价格: ' + json.price + ' 元,还剩: ' + json.tickets + ' 张。');
},
error: function(){
alert('失败了!');
}
});
});
</script>
</head>
<body>
</body>
</html>
- js中事件的三个阶段(JavaScript中事件冒泡机制示例详析)
- node.js express 上线(node+express实现分页效果)
- js的模块模式设计(JS实现单例模式的6种方案汇总)
- js竖屏切换程序(js判断移动端横竖屏视口检测实现的几种方法)
- js中alert加参数写法(详解JavaScript Alert函数执行顺序问题)
- js如何实现定时器功能(js实现0ms延时定时器的几种方式)
- nodejs请求页面(node.js+postman实现模拟HTTP服务器与客户端交互)
- vuejs全家桶入门教程交流(Vue全家桶入门基础教程)
- js复制内容到剪贴板
- js tab栏案例(JavaScript实现Tab栏切换特效)
- vue3 响应式的实现过程(Vue3.x使用mitt.js进行组件通信)
- jscanvas画折线图(js+canvas实现代码雨效果)
- 怎么用织梦上传源码(如何把织梦dedecms数据生成json)
- 通过js获取Url的参数值
- js三级联动说明(基于JavaScript实现省市联动效果)
- js获取上个月第一天和最后一天
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
- 苹果15价格(苹果15价格512g官网)
- 春节放假几天(春节放假几天2023法定几天)
热门推荐
- 结构、枚举和数组的区别
- sql server2008无法连接怎么办(SQL Server 2008 R2登录失败的解决方法)
- mysql新增字段并添加备注(mysql添加备注信息的实现)
- 宝塔ftp服务器怎么设置(宝塔面板创建的ftp登陆无法连接的解决方案)
- ExecuteNonQuery()返回值
- dedecms验证码要怎么设置(DEDECMS 后台验证码图片不显示的多种解决方法)
- 织梦dedecms加固版需要付费吗(织梦dedecms系统后台安全提示去除方法)
- 搭建ftp服务器狗无法访问(护卫神主机大师创建网站后FTP无法上传的解决办法)
- php入门教程环境搭建教程(PHP从零开始打造自己的MVC框架之入口文件实现方法详解)
- python编程ide工具(这6款Python IDE&代码编辑器,你都用过吗?)