一、什么是JSONP?

百度百科:JSONP(JSON with Padding)是JSON的 一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

二、JSONP的实现思路很简单

1、前端创建script标记,设置src,添加到head中(当然也可以往body中添加)。

2, 后台返回一个js变量jsonp,这个jsonp就是请求后的JSON数据。

3, 回调完成后删除script标记(还有一些清理工作如避免部分浏览器内存泄露等)。

三、简单代码例子

服务器端:

<?php
$obj=array('chicken'=>2,'duck'=>3);//$ob是待传递对象
$callback=$_GET['callback'];//获取传入的函数名
if(!$callback){$callback='jsoncallback';//如果没传入就使用的默认函数名
}
//输出一段JS格式的代码,调用用传入的函数名,参数为需要传递的$obj对象
echo "alert('我是小偷,哈哈');".$callback.'('.json_encode($obj).');';
?>

客户端:

<div>
鸡<span id="chicken"></span>只
<br/>
鸭<span id="duck"></span>只
</div>
<script type="text/javascript">
//回调函数定义
function mycallback(obj){//输出传递过来的对象
  document.getElementById('chicken').innerHTML=obj.chicken;document.getElementById('duck').innerHTML=obj.duck;
};window.onload=function(){//创建SCRIPT标签var script=document.createElement("script");//设置URL
  script.src="http://127.0.0.1:8081//langtao/steal.php?callback=alert('我是强盗');mycallback";//把标签放入文档中以便生效
  document.body.appendChild(script);document.body.removeChild(script);
};
</script><!--<script>
$.ajax({
dataType:'jsonp',
data:'id=1',
jsonp:'callback',
url:'http://127.0.0.1:8081//langtao/steal.php',
success:function(obj){document.getElementById('chicken').innerHTML=obj.chicken;document.getElementById('duck').innerHTML=obj.duck;
},
});
</script>--><!--<script>
$.getJSON("http://127.0.0.1:8081//langtao/steal.php?callback=?",function(obj){document.getElementById('chicken').innerHTML=obj.chicken;document.getElementById('duck').innerHTML=obj.duck;}
);
</script>-->

四、安全问题

JSONP虽然易于实现,但是也会存在一些安全隐患,如果第三方的脚本随意地执行,那么它就可以篡改页面内容,截获敏感数据。但是在受信任的双方传递数据,JSONP是非常合适的选择。

转载于:https://www.cnblogs.com/aaron-shu/p/4170304.html

跨域(三)——JSONP相关推荐

  1. jQuery(三) javascript跨域问题(JSONP解决)

    加油~ --WH 一.什么是javascript跨域问题? 域:服务器域名,唯一标识(协议,域名,端口)必须保证一致,说明域相同 跨域:在一个服务器上,去访问另一个服务器上,并且得到另一个服务器返回回 ...

  2. ajax跨域请求Jsonp实现,使用jsonp实现ajax跨域请求

    Jsonp(JSON with Padding)是资料格式 json 的一种"使用模式",可以让网页从别的网域获取资料. 由于同源策略,一般来说位于 server1.example ...

  3. 【Ajax】Ajax全面讲解、跨域与JSONP及了解HTTP

    Ajax 一.初识Ajax 1.1 URL地址 1.1.1 URL地址组成部分 1.2 客户端与服务器的通信过程 1.3 网页中如何请求数据 1.4 资源的请求方式 1.5 Ajax的概念 1.6 j ...

  4. Ajax跨域和JSONP

    跨域与JSONP 了解同源策略和跨域 同源策略 1.什么是同源 如果两个页面的协议,域名和端口都相同,则两个页面具有相同的源 判断下表给出的URL地址与http://www.test.com/inde ...

  5. 跨域请求——jsonp与cors

    一.jsonp 首先我们来想一想 为什么会有跨域这个名词的出现呢? 跨域又是什么呢?为何要跨域? 浏览器的同源策略又是什么?怎么解决? jsonp又是什么? 跨域的原理又是什么呢? 名词解释: 跨域: ...

  6. Ajax(jQuery封装),表单form提交(Ajax),art-template模板引擎,原生Ajax,XML和JSON,axios,跨域和JSONP,防抖和节流,HTTP协议

    目录 服务器基本概念 1.URL 2.URL地址的组成部分 3. 图解客户端与服务器的通信过程 4.网页中如何请求数据 5.资源的请求方式 Ajax jQuery中的Ajax 1. $.get()函数 ...

  7. jQuery高级用法、axios、同源与跨域、JSONP以及防抖与节流

    重点: 一.jQuery高级用法 1. jQuery实现文件上传 (1)定义UI结构 (2)验证是否选择了文件 ①将 jQuery 对象转化为 DOM 对象,并获取选中的文件列表 ②判断是否选择了文件 ...

  8. AJAX | 跨域与JSONP + 同源策略和跨域 + JSONP + 防抖和节流 + 案例 – 淘宝搜索

    目录 同源策略和跨域 同源策略 跨域 JSONP JSONP的实现原理 自己实现一个简单的JSONP JSONP的缺点 jQuery中的JSONP 自定义参数及回调函数名称 jQuery中JSONP的 ...

  9. 【AJAX 笔记】AJAX 基本、HTTP 基本、原生 AJAX 的使用,jQuery / Axios / fetch 发送请求、跨域(JSONP/CORS)

    文章目录 1 Ajax 概述 1.1 AJAX 简介 1.2 XML 简介 1.3 AJAX 的特点 1.3.1 AJAX 的优点 1.3.2 AJAX 的缺点 1.4 AJAX 属性和方法 2. H ...

  10. Ajax跨域:Jsonp原理解析

    推荐先看下这篇文章:JS跨域(ajax跨域.iframe跨域)解决方法及原理详解(jsonp) JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重 ...

最新文章

  1. c#直接调用ssis包实现Sql Server的数据导入功能
  2. 第二届全国大学生智能汽车竞赛获奖名单
  3. 数据导出之sqlserver-导出脚本
  4. docker 安装nacos_「Java Spring Cloud 实战之路」 使用nacos配置网关
  5. Java中可变长参数的使用及注意事项
  6. 条款五:对应的new和delete要采用相同的形式
  7. java 中Lock的使用
  8. Python学习笔记——time模块和datatime模块【时间处理】
  9. openpyxl 列 插入_python3对excel读写openpyxl
  10. Kafka会不会丢消息
  11. 【HTML+CSS网页设计与布局 从入门到精通】第7章-class、ID选择器,CSS格式
  12. Connect By在10g中得增强, nocycle关键字等
  13. QT tablewidget设置表头
  14. CNN结构:色彩特征提取-色彩属性HSV空间(色彩冷暖初始)
  15. 纯HTML+CSS实现3D炫酷魔方(相册)
  16. Tkinter模块GUI界面化编程实战(七)——人机对战五子棋(含超详解及完整源码、完整程序免费下载链接)
  17. 用VB.NET写的一个简易的RSS阅读器
  18. 【fake location破解版】加强版随风2.0定位助手使用方法
  19. Db2 load 导致表空间pengding
  20. STM32——继电器控制灯的开关

热门文章

  1. 2010年亚运会前广州将大力推广清洁能源公交
  2. 何时使用委托而不使用接口
  3. Spring Boot 动态注入的两种方式 1
  4. Python基础知识-05-数据类型总结字典
  5. 统计信息自动收集任务失效原因排查
  6. Tomcat 配置和spring-framework MVC配置简介
  7. wxWidgets之wxGrid控件
  8. Meteor创建示例项目 Simple-todos
  9. Apache http强制转为https页面访问(转)
  10. 2013年6月和12月CISA考试报名,认证,CPE维持和备考要点