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 相关文章推荐
JS 有名函数表达式全面解析
Mar 19 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
必备的JS调试技巧汇总
Jul 20 Javascript
JS匿名函数类生成方式实例分析
Nov 26 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
JavaScript 事件对内存和性能的影响
Jan 22 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
react router 4.0以上的路由应用详解
Sep 21 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
axios拦截设置和错误处理方法
Mar 05 Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 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
fgetcvs在linux的问题
2012/01/15 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
Yii快速入门经典教程
2015/12/28 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
Python类的基础入门知识
2008/11/24 Python
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python实现查找系统盘中需要找的字符
2015/07/14 Python
python黑魔法之参数传递
2016/02/12 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
Django实现文件上传下载
2019/10/06 Python
波兰补充商店:Muscle Power
2018/10/29 全球购物
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
书法培训心得体会
2014/01/05 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
工程资料员岗位职责
2014/03/10 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript