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 相关文章推荐
JavaScript创建命名空间(namespace)的最简实现
Dec 11 Javascript
JavaScript Date对象使用总结
May 14 Javascript
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
Apr 27 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
JQuery解析HTML、JSON和XML实例详解
Mar 29 Javascript
javascript学习笔记(二)数组和对象部分
Sep 30 Javascript
js实现超简单的展开、折叠目录代码
Aug 28 Javascript
js过滤HTML标签完整实例
Nov 26 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
Nov 30 Javascript
javascript设置页面背景色及背景图片的方法
Dec 29 Javascript
JavaScript:Array类型全面解析
May 19 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
ThinkPHP之M方法实例详解
2014/06/20 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
JavaScript中的事件处理
2008/01/16 Javascript
js 省地市级联选择
2010/02/07 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
python如何操作mysql
2020/08/17 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
保险专业大专生求职信
2013/10/26 职场文书
庆八一活动方案
2014/01/25 职场文书
师德师风自查总结
2014/10/14 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
Flask搭建一个API服务器的步骤
2021/05/28 Python
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电