jsonp的原理和实现

一叶知秋https://www.cssge.com      2022-02-12     591

关键词:

什么是JSONP?

javascript高级程序设计中是这样介绍jsonp的:

jsonp是JSON with padding(填充式JSON或参数式JSON )的简写,是应用JSON的一种新方法,在后来的Web服务中非常流。jsonp看起来与json差不多,只不过是被包含在函数调用中的json。jsonp由回调函数和数据两部分组成。

简单点说,jsonp是一种跨域通信的手段,它的原理其实很简单:

  1. 首先是利用script标签的src属性来实现跨域。
  2. 通过将前端方法作为参数传递到服务端,然后由服务的注入参数之后再返回,实现服务器向客户端通信。
  3. 由于使用script标签的src属性,因此只支持get方法。

下面详细讲解如何实现jsonp。

一.实现流程

1.设定一个script标签

 <script src="http://jsonp.js?callback=xxx"></script>

2.callback定义了一个函数名,而远程服务端通过调用指定的函数并参数参数来实现传递参数,将fn(response)传递回客户端。

$callback = !empty($_GET[‘callback‘]) ? $_GET[‘callback‘] : ‘callback‘;
echo $callback.‘(.json_encode($data).)‘;
 
3.客户端接收到返回的js脚本,开始解析和执行fn(response)
 
二.jsonp简单实现
 
1.在浏览器端:
首先全局注册一个callback回调函数,记住这个函数名字(比如:result),这个函数接收一个参数,参数是服务端返回的数据,函数的具体内容时处理这个数据。
然后动态生成一个script标签,src为:请求资源的地址 + 获取函数的字段名 + 回调函数名,这里 获取函数字段名是要和服务端约定好的,是为了让服务端拿到回调函数名称。(比如:www.example.com?callbackName = result)
 
function result (data) {
console.log(data.name)
}
var jsonp = document.createElement(‘script‘)
jsonp.src = ‘www.example.com?callbackName=result‘
document.getElementsByTagName(‘head‘)[0].appendChild(jsonp)
 
2.服务端
在接收到浏览器端script的请求之后,从url的query的callbackName获取到回调函数的名字,例子中是 result。
然后动态生成一段js片段去给这个函数传入参数执行这个函数。比如:
 
result({name:‘Joy‘})

 

3.执行
 
服务端返回这个script之后,浏览器端获取到script资源,然后会立即执行这个js,也就是上面那个片段,这样就能根据之前写好的回调函数处理这些数据了。
 
在一些第三方库往往都会封装jsonp的操作,比如jquery的$.getJSON





jsonp原理解析

...服务端需要配置的地方会较多。这篇解析一下jsonp的实现原理。基本原理基本原理很容易说明白,在html页面中有一些标签是不受跨域限制的,比如img, 查看详情

前端跨域之jsonp实现原理及.net下jsonp的实现

jsonp的本质是通过script标签的src属性请求到服务端,拿到到服务端返回的数据,因为src是可以跨域的。前端通过src发送跨域请求时在请求的url带上回调函数,服务端收到请求时,接受前端传过来的回掉函数名称,将其拼接成js函... 查看详情

原生javascript里jsonp的实现原理

ajax不能跨域,jsonp可以跨域跨域的核心思想:     调用(拿到的接口),定义(jsonp核心处理器)分别是不同的script标签里面进行跨script取数据(只有get方式进行取数据) jsonp传进来的数据是{url:‘‘,data:{ ... 查看详情

原生javascript里jsonp的实现原理

ajax不能跨域,jsonp可以跨域跨域的核心思想:     调用(拿到的接口),定义(jsonp核心处理器)分别是不同的script标签里面进行跨script取数据(只有get方式进行取数据) jsonp传进来的数据是{url:‘‘,data:{ ... 查看详情

jsonp原理及实现(代码片段)

JSONP原理及实现1概述2优点3缺点4实现1概述JSONP是是一种跨域通信的手段,它可以让网页从别的域名(网站)中获取数据,即跨域读取数据,兼容性好,但是只能处理GET请求。它的原理是利用script标签的src属... 查看详情

jsonp原理及实现跨域方式

今天做页面时,后台给了个接口:https://a.a.com/a/a.json,我页面的上线地址是:http://b.b.com。显而易见,因为浏览器同源策略的限制,通过ajax无法无法取得json的数据。百度百科同源策略,它是由Netscape提出的一个著名的安全策略。... 查看详情

使用xhr2或jsonp实现跨域以及实现原理

 我们直接使用XMLHttpRequset请求外部接口会发现报这个错误其实浏览器成功发送请求并拿回了数据 只是浏览器的同源策略禁止了获取 在xhr2服务器端支持跨域需要在响应头增加Access-Control-Allow-Origin:*//*代表任何域。也可... 查看详情

jsonp原理及实现(代码片段)

JSONP原理及实现1概述2优点3缺点4实现1概述JSONP是是一种跨域通信的手段,它可以让网页从别的域名(网站)中获取数据,即跨域读取数据,兼容性好,但是只能处理GET请求。它的原理是利用script标签的src属... 查看详情

jsonp原理和jqueyjsonp原理实践

 $.ajax({type:"get",async:false,url:"ajax.htm",dataType:"jsonp",jsonp:"callback",//传到服务器端参数名,需要协商一致jsonpCallback:"callbackFunction",//传到服务器端参数值,需要协商一致success:function(jsonData){alert(jsonData);al 查看详情

跨域jsonp原理及调用详细演示样例

...:JSONP和CORS。 那这篇博客就介绍JSONP方式。 JSONP原理  在同源策略下,在某个server下的页面是无法获取到该server以外的数据的,但img、iframe、script等标签是个例外。这些标签能够通过src属性请求到其它server上的数... 查看详情

jsonp跨域实现

...节点的方法向不同域提交HTTP请求的方法。JSONP跨域的基本原理:由于script标签不受浏览器同源策略的影响,允许跨域引用资源。因此,通过动态创建script标签,然后利用src属性进行跨域。JSONP的优点:不受同源策略的限制;兼容... 查看详情

vue--jsonp的诞生原理及应用实例

问题:页面中有一个按钮,点击之后会更新网页中的一个盒子的内容。Ajax可以很容易的满足这种无须刷新整个页面就可以实现数据变换的需求。但是,Ajax有一个缺点,就是他不允许跨域请求资源。如果我的代码在codepen上,我不... 查看详情

jsonp原理

HTML中script标签可以加载其他域下的js,比如我们经常引入一个其他域下线上cdn的jQuery。那如何利用这个特性实现从其他域下获取数据呢?可以先这样试试:<scriptsrc="http://api.jirengu.com/weather.php"></script>这时候会向天气接口... 查看详情

基于原生js的jsonp方法的实现

...大家并不陌生,是在js异步请求中解决跨域的方法之一,原理很简单,有不清楚的同学可以google下,这里就补详细解释了。在Jquery库中,jQuery直接封装有jsonp的方法,很简便,只需在ajax请求的参数中加入datatype:jsonp,jsonp:jsonpcallback... 查看详情

前端知识点总结(javascript篇)(代码片段)

同源策略及跨域请求的方法和原理(比较JSONP和document.domain的不同及优劣,以及HTML5的跨域方案)JavaScript数据类型JavaScript字符串转化JSONP原理及优缺点XMLHttpRequest事件委托前端模块化(AMD和CommonJS的原理及异同,seajs和requirejs的异... 查看详情

jsonp与ajax

jsonp思维导图:1、定义2、为什么用3、json原理4、优缺点何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术?JSON和JSONP??虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而J... 查看详情

深入理解jsonp原理——前端面试

JSON和JSONP虽然只有一个字之差,但是它们俩是八竿子打不着的:JSON是一种数据交换格式,JSONP是非正式的跨域数据交换协议。为什么说JSONP是非正式的传输协议呢?因为它就是利用了<script>标签没有跨域限制这一“漏洞”来... 查看详情

jsonp实现跨域

 原理:利用了src属性都可实现跨域的特点,创建新的script标签,src的值为要进行跨域访问的地址,这样就可以执行不同域的js代码了,这里在src进行赋值的时候传一个callback的函数名到服务器,服务器就会根据所传的callback名... 查看详情