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 相关文章推荐
表单元素事件 (Form Element Events)
Jul 17 Javascript
Javascript的一种模块模式
Sep 08 Javascript
js获取客户端外网ip的简单实例
Nov 21 Javascript
js判断某个方法是否存在实例代码
Jan 10 Javascript
JavaScript判断undefined类型的正确方法
Jun 30 Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
React-router 4 按需加载的实现方式及原理详解
May 25 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
Jan 08 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
详解解决小程序中webview页面多层history返回问题
Aug 20 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
微信小程序实现手指触摸画板
2018/07/09 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
Vue实现简单分页器
2018/12/29 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
关于Python数据结构中字典的心得
2017/12/04 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
关于Python错误重试方法总结
2021/01/03 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
navabi英国:设计师大码女装
2019/06/25 全球购物
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
Shell编程面试题
2016/05/29 面试题
模具设计与制造专业应届生求职信
2013/10/18 职场文书
八年级英语教学反思
2014/01/09 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
学校运动会简讯
2015/07/20 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL