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 相关文章推荐
提高网站信任度的技巧
Oct 17 Javascript
使用隐藏的new来创建对象
Mar 29 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
May 16 Javascript
Node.js Addons翻译(C/C++扩展)
Jun 12 Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
Element MessageBox弹框的具体使用
Jul 27 Javascript
Js利用正则表达式去除字符串的中括号
Nov 23 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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
BootStrap selectpicker
2016/06/20 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
python实现划词翻译
2020/04/23 Python
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
Python入门篇之字符串
2014/10/17 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
Python urllib2运行过程原理解析
2020/06/04 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
高中考试作弊检讨书
2014/01/14 职场文书
大学生学习计划书
2014/09/15 职场文书
2015年消防工作总结
2015/04/24 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
比较node.js和Deno
2021/04/27 Javascript
Python包argparse模块常用方法
2021/06/04 Python