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 23 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
Aug 07 Javascript
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
Feb 26 Javascript
javascript设计模式之解释器模式详解
Jun 05 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
Mar 05 Javascript
JavaScript实现动画打开半透明提示层的方法
Apr 21 Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 Javascript
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
JavaScript获取某一天所在的星期
Sep 05 Javascript
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
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在线生成ico文件的代码
2007/10/09 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
tensorflow如何批量读取图片
2019/08/29 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
分家协议书
2014/04/21 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang