JSONP 的原理、理解 与 实例分析


Posted in Javascript onMay 16, 2020

本文实例讲述了JSONP 的原理、理解 与 实例。分享给大家供大家参考,具体如下:

1.什么是jsonp

1.1 同源策略 

浏览器同源策略的限制,XmlHttpRequest只允许请求当前源(相同域名、协议、端口)的资源。

-1)jsonp只支持get请求

-2)不受同源策略限制 ,兼容性好 不需要XMLHttpRequest(ActiveX)支持,通过js回调函数返回结果

-3)不能解决 不同域的两个页面之间js调用的问题

2. jsonp 原理

动态添加一个script标签,get链接上发送回调函数名称 传给服务器 服务器获取回调函数名称 返回这个函数名称的JS函数(拼装函数) json数据作为函数的实际参数传入 返回的数据是js函数  在前端调用回调函数( json数据传入) 执行回调函数

3.实例

先来说说 服务端应该返回的数据形式 如下所示 用的php  thinphp框架编写的 访问URL 是 

http://91hx.xicp.cn:8989/Service/Validata/testJsonP?callback=jsonpCallback callback后面的名字要传给服务器的 后端拼装成一个js回调函数 这样前台json数据就作为回调函数的参数传入 获取到数据了

public function testJsonP(){
    $jsonname =I('get.callback');//获取URL上的callback名称 也就是获取jsonpCallback

    $a = [name=>'张三',sex=>'男',msg=>'返回成功!'];// 一个数组数据
    $json = json_encode($a);// 转成json数据

    echo $jsonname.'('.$json.');';//正确的格式应该是这样 jsonpCallback({"name":"\u5f20\u4e09","sex":"\u7537","msg":"\u8fd4\u56de\u6210\u529f\uff01"}); 不要忘记分号; 这样返回的才是一个js函数 前台肯定有这个函数名字才行

}

tip:关联数组 上面例子 $a = array( "msg" => "返回成功!")

前台 访问URL http://localhost:63343/H5/jsonP.html 动态添加一个script标签 src里 调用回调函数 jsonpCallback() . ?callback=jsonpCallback名字随便起 后端获取的就是jsonpCallback这个名字而已 

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>

<script type="text/javascript">

  function jsonpCallback(date){
    console.log(date);
    alert(date);
    alert(date.msg);
  }
  var script =document.createElement('script');
  script.src='http://91hx.xicp.cn:8989/Service/Validata/testJsonP?callback=jsonpCallback';
  document.body.insertBefore(script,document.body.firstChild);


</script>

</body>
</html>

 我们可以在浏览器里 这里我用的谷歌直接查看 数据是否访问正确 切换到Network标签下 可以看到生成的访问地址 点击然后

JSONP 的原理、理解 与 实例分析 

这下面的图 点击一下左侧链接   切换到Response就可以看到响应的数据了 跟前端写的函数名要一致 里面的json数据就是 那个函数的参数 传入 别忘记有分号;

JSONP 的原理、理解 与 实例分析

前端我们已经console.log 数据了 也可以查看 切换到Console标签下

JSONP 的原理、理解 与 实例分析

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery select选中的一个小问题
Oct 11 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
JavaScript Math.floor方法(对数值向下取整)
Jan 09 Javascript
JS实现控制表格内指定单元格内容对齐的方法
Mar 30 Javascript
javascript实现动态表头及表列的展现方法
Jul 14 Javascript
js仿新浪微博消息发布功能
Feb 17 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
JavaScript实现的反序列化json字符串操作示例
Jul 18 Javascript
小程序页面动态配置实现方法
Feb 05 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
Mar 11 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
Vue SSR 即时编译技术的实现
May 06 Javascript
JavaScript随机数的组合问题案例分析
May 16 #Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
May 18 #Javascript
vue el-tree 默认展开第一个节点的实现代码
May 15 #Javascript
基于leaflet.js实现修改地图主题样式的流程分析
May 15 #Javascript
uni-app从安装到卸载的入门教程
May 15 #Javascript
Vue数据双向绑定原理实例解析
May 15 #Javascript
JavaScript鼠标悬停事件用法解析
May 15 #Javascript
You might like
php cookis创建实现代码
2009/03/16 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
python实现梯度下降法
2020/03/24 Python
python源文件的字符编码知识点详解
2021/03/04 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
实习自荐信
2013/10/13 职场文书
工作中个人的自我评价
2013/12/31 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书