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 相关文章推荐
获取URL地址中的文件名和参数的javascript代码
Sep 02 Javascript
Javascript结合css实现网页换肤功能
Nov 02 Javascript
发布一个基于javascript的动画类 Fx.js
Nov 05 Javascript
Javascript合并表格中具有相同内容单元格示例
Aug 11 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
Sep 16 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
Jun 03 Javascript
javascript的理解及经典案例分析
May 20 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
Javascript ParentNode和ChildNode接口原理解析
Mar 16 Javascript
Vue 同步异步存值取值实现案例
Aug 05 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
Jan 27 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
德生PL660的电路分析和打磨
2021/03/02 无线电
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
Python解析Excle文件中的数据方法
2018/10/23 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
pytorch 模型可视化的例子
2019/08/17 Python
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
护理个人求职信范文
2014/01/08 职场文书
高三英语教学反思
2014/01/13 职场文书
局火灾防控工作方案
2014/05/25 职场文书
法人委托书范本
2014/09/15 职场文书
幼儿学前班评语
2014/12/29 职场文书
redis数据结构之压缩列表
2022/03/21 Redis