浅谈JSONP 的本质工作原理
json 是一种数据格式
jsonp 是一种数据调用的方式。
你可以简单的理解为 带callback的json就是jsonp
话说我们访问一个页面的时候 需要像另一个网站获取部分信息, 这就是所谓的跨域请求才能完成的功能, 比如引入外部js, img 等等, 说到发送请求, 在web2.0的时代 我们避免不了 ajax 请求了, 当然我们在
工作中用到 ajax 跨域请求 是必须遇到的,当然ajax 是不支持跨域请求的 但jsonp可以解决这个问题, 下面我们就来分析一下在这个东西是怎么工作的额 。
说道JSONP,很简单,就是利用<script>标签没有跨域限制的特点来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如:
<script src="http://www.example.net/api?param1=1¶m2=2"></script>
并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。
可能多数人对它的知晓程度仅限于jQuery,jQuery提供了发送jsonp请求的方法。比如在使用$.ajax()方法的时候
jQuery(document).ready(function(){ $.ajax({url: "http://域名/ajax/test",dataType: "jsonp",jsonp: "callback",success: function(json){// alert(json);},error: function(){}});});
jQuery将jsonp请求封装成类似ajax请求的样子,这样能让开发者在使用的时候更加方便,但是实际上,jsonp压根不是通过XMLHttpRequest来实现的。
下面的代码你就知道jsonp的如何实现的了
var callbackName = 'callback'; window[callbackName] = function (data) { alert(data); // 对返回的数据做后续处理 } var script = document.createElement('script'); script.src = 'http://hf-test.haoju.cn/esf/ajax/test?callback='+callbackName; document.body.appendChild(script);
这是前端部分的代码,要想真正实现JSONP的功能,还需要后端的配合。针对上面这个例子,当前端请求这个script地址的时候,后端只要按以下内容响应就会有神奇的效果:
echo callback('my is jsonp');
实际上,jQuery发JSONP请求时也是这么做的。
下面是Jason跟JasonP的项目实战连接:
http://www.qixing318.com/article/simply-describe-the-difference-between-json-with-json-as-well-as-the-actual-combat.html
转载于:https://www.cnblogs.com/jason-hhc/p/6491817.html
浅谈JSONP 的本质工作原理相关推荐
- 【NXP DN 系列】浅谈 DPAA1 Software Architecture 工作原理
浅谈 DPAA1 Software Architecture 工作原理 一.介绍 DPAA1 的主要目的是在片上系统( SOC )的 IO 部分内提供智能处理,以进行路由和管 理与流量相关的处理工作, ...
- 浅谈MOS管的工作原理
1.MOS管简介 MOS管又称场效应管,即在集成电路中绝缘性场效应管.MOS英文全称为Metal-Oxide-Semiconductor,即金属-氧化物-半导体,表示为:在一定结构的半导体器件上, ...
- 浅谈SEO搜索引擎基本工作原理
搜索引擎工作原理一共包括三个过程:网页搜索,预处理信息,建立索引,那么今天铭伟就把搜索引擎的工作原理进行解析一篇. 1.抓取网页.每个独立的搜索引擎都有自己的网页抓取程序爬虫(spider).爬虫Sp ...
- (转)浅谈dedecms模板引擎工作原理及自定义标签
理解织梦模板引擎有什么意义?一方面可以更好地自定义标签.更多在于了解织梦系统,理解模板引擎是理解织梦工作原理的第一步.理解织梦会使我们写php代码时更顺手,同时能学习一些php代码的组织方式. 这似乎 ...
- 计算机设备驱动的作用,浅谈电脑驱动程序的工作原理 详解电脑驱动程序意义...
本文主要是关于电脑驱动程序的相关介绍,并着重对电脑驱动程序的工作原理及意义进行了详尽的阐述. 电脑驱动程序 1 驱动程序是什么 驱动程序的概念,驱动程序实际上是一段能让电脑与各种硬件设备通话的程序代码 ...
- 浅谈Servlet的本质
浅谈Servlet的本质 孟军补充:其实这里的servlet引擎就是servletAPI规范,也就是接口规范,何必说的如此文邹邹的,真是. servlet的本质其实就是servletAPI,程序员se ...
- 浅谈Git的基本工作流程与简单的Git命令
浅谈Git的基本工作流程与简单的Git命令 什么是GIT? 定义:是一个开源的分布式版本控制工具 功能: 代码备份 版本控制 协同开放 代码追溯 场景: 团队协同开放项目 Git仓库工作流程 Git常 ...
- 浅谈操作系统是如何工作的及简单的进程调度的linux实现
浅谈操作系统是如何工作的及简单的进程调度的linux实现 1)进程的启动和切换机制 a)进程的启动机制 保存ebp的值到栈, 将esp的值保存在prev->thread.sp,在下一步esp的值 ...
- php的解析别名,浅谈laravel aliases别名的原理
在laravel发现有些类可以直接use 类名,就能使用了,例如use DB;就可以使用DB类了,问题是DB这个类并不在根命名空间,这里面实际就是用到了别名. 先通过如下例子来分析基本原理 建立如下文 ...
最新文章
- 搭建yum仓库定制rpm包
- iphone开发如何测试?
- android左侧固定导航栏,Android使用fragment实现左侧导航
- Visual Studio 2005 移植 (札记之一)
- 消除文法左递归-编译原理
- ubuntu 修改 ssh默认端口号
- 通用型CRM还是行业型CRM?-定制为王
- 字符串之String类
- 物联网设备获取北京时间、年月日、星期几,GMT格林威治标准时间转换为北京时间,授时api Fiddler抓包调试
- xampps mysql无法启动
- kubernetes pod往宿主机拷贝文件
- 如何删减QQ无用功能 为系统彻底减负
- GlobalMapper小白学习日记
- 地铁bas服务器系统,轨道交通BAS系统/火车站地铁BAS系统包括什么
- padavan mysql_newifi3 用Padavan(老毛子)固件 搭建web 尝试
- 002.光流传感器(ADNS0380版)使用说明
- 处理器最新排行_CPU跑分工具CINBENCH R23排行榜出炉:AMD锐龙单核、多核均屠榜
- ubuntu16.04下安装网易云音乐(官网已经换为18.04)
- EBS之挂载表单的详细步骤
- JavaWEB_POI导出大量数据excel(50万左右)
热门文章
- matplotlib输出图形到网页_pytorch使用matplotlib和tensorboard实现模型和训练的可视化...
- java list排序 sort_Java排序方法sort的使用详解
- 什么是SQL Server GETDATE()函数?
- python zip函数_Python zip()函数
- 开课吧:Dubbo的整体架构设计有哪些分层?
- 开课吧Java课堂:特殊的字符串如何操作,字符串如何连接
- Java新职篇:多态性、封装性与继承性相互作用是什么?
- HTML5中Audio使用踩坑汇总
- drupal7 smtp+mimemail+mailsystem 实现发送html邮件
- linux Centos下mysql安装