浅析JSONP
什么是JSONP?
JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。--来源百度
从它的定义中不难看出jsonp是一种以json格式作为填充的一种实现跨域的方法!
<span">那么这里说的填充指的又是什么?我们来看一段例子:
function callback(a){
alert(a.name);
}
<script src="http://.....com/..php?JSONP='21'"></script>
上面是一个最简单的一个带参数的函数,假设我们现在需要跨越获取一些数据,如获取当前用户的名字name,参数a就是我们需要从后台获取的数据,但是在上面我们并没有调用他!而是通过script标签向服务器发送请求,下面我们在来看看php文件怎么写:
if(!empty($_GET['JSONP'])){
$id = $_GET['JSONP'];
$query = mysql_query("select * from user where id=$id");
$res = mysql_fetch_array($query);
echo "callback({‘name’:$res['name'])";
}
上面就是php文件的内容了,首先获取请求的url参数,在这里我传的是用户id,然后根据id去数据库查询对应的数据,然后输出js文件定义的方法名,并把用户的名字当成参数放进去!
这里我们对于参数的补充,就是我们上面所说的填充,顾名思义,就是把我们要取的数据填充到参数里!
看了上面的例子就不难理解了,jsonp其实就是在前台定义一个函数,然后通过script标签发送请求(由于script标签发送的请求是可以不守跨域规则限制),然后后台处理并输出之前定义的函数名,并把数据以json的格式填充到参数中,这样在请求返回时就会调用我们之前定义的函数,并获得想要的数据!
这就实现了一个简单的jsonp!说的直白点就是在前台定义函数,然后后台输出函数名和参数完成函数的调用和数据的获得!当然,它最主要的作用在于解决js跨域的问题!
由于本人水平有限,只能简单的说一些实例,来和大家共同成长!感谢各位浏览!
本文由 平凡公子原创并首次发表欢迎转载(转载请注明作者和原文地址)!
浅析JSONP的更多相关文章
- 说说JSON和JSONP,浅析JSONP解决AJAX跨域问题
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...
- JSON和JSONP,浅析JSONP解决AJAX跨域问题
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...
- JSONP浅析
DEMO : JSONP示例 为什么使用JSONP JSONP和JSON是不一样的.JSON(JavaScript Object Notation)是一种基于文本的数据交换方式,或者叫做数据描述格式. ...
- json与jsonp区别浅析(json才是目的,jsonp只是手段)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- json与jsonp区别浅析(json才是目的,jsonp只是手段) (转)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- 浅析跨域的方法之一 JSONP
概念: 什么叫跨域? 同源策略:它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略. 所谓同源是指,域名,协议,端口相同. 同源的脚本才会被执行 ...
- 【转】json与jsonp区别浅析(json才是目的,jsonp只是手段)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- 浅析JSONP-解决Ajax跨域访问问题
浅析JSONP-解决Ajax跨域访问问题 很久没有写随笔了,总是感觉没时间,其实时间就是...废话少说,前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现 ...
- Vue 浅析与实践
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:曾柏羲 导语 入职接到的第一个需求是实现一个关于K歌实体售卖的ERP系统,管理系统过去做过不少,这次打算换个姿势,基于时下正热但早已不新 ...
随机推荐
- C++标准命名空间std
输入输出要用到这个. 标准C++库的所有的标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(如iostream)中函数.类.对象和类模板是在命名空间 std中定义的.std是standa ...
- Qt Creater中的.pro文件和.pri文件
初学Qt,使用Qt Creater打开Demo "QT 3D Basic Shapes C++ Example",发现除了pro文件外,还有一个pri文件,在此小白一下! *.pr ...
- PHP 免费获取手机号码归属地
一.淘宝网API API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回 ...
- iOS AppsFlyer的使用注意事项
AppFlyer 是近期比較火的一款广告追踪统计工具,当然统计的功能友盟也能够实现,而appsflyer更是具有定向投放,是app跳转到对应的页面. 详细的:当点击广告的时候,假设没有安装应用.则会跳 ...
- AngularJS------报错"The selector "app-user-item" did not match any elements"
原因:新建的组件没有在任何界面使用到 解决方法:在界面使用该组件
- js中forEach,for in,for of的区别
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- ASPX代码加固小结
1.replace替换 <%@Page Language="C#"%> <% string strID=Request["id"]; strI ...
- ScaleType属性
FIT_CENTER 把原图按照比例放大缩小到ImageView的高度,显示在ImageView的center(中部/居中显示). 1 2 CENTER_CROP 会拉伸图片以原图填满ImageV ...
- javascript实现的网页打印
打印全部页面: <body onload="javascript:window.print()"> 实现局部打印,可以将不参加打印的元素设置“display=none” ...