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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
jquery 3D球状导航的文章分类
Jul 06 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
jquery()函数的三种语法介绍
Oct 09 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
Oct 20 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
Oct 22 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
php木马攻击防御之道
2008/03/24 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
浅谈PHP进程管理
2019/03/08 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
django中ImageField的使用详解
2020/12/21 Python
python字典与json转换的方法总结
2020/12/28 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
致全体运动员广播稿
2014/02/01 职场文书
房屋转让协议书
2014/04/11 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
财务审计整改报告
2014/11/06 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
课改心得体会范文
2016/01/25 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android