JSONP跨域请求


Posted in Javascript onMarch 02, 2017

什么是跨域:

1、域名不同

2、域名相同端口不同

js出于对安全考虑不支持跨域请求。我们可以使用JSONP解决跨域问题。

一、JSONP是什么

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

原理:浏览器在js请求中,是允许通过script标签的src跨域请求,可以在请求的结果中添加回调方法名,在请求页面中定义方法,既可获取到跨域请求的数据。(js请求的不是一个单纯的json数据而是一段包含json数据的js脚本)

JSONP跨域请求

二、模拟JSONP

服务器域名:http://localhost:8081/rest/itemcat/list

客户端服务器:http://localhost:8082/test.html

1、普通的JS跨域请求

服务器数据:

JSONP跨域请求

客户端请求代码:

$(function(){
  $.ajax(    {url: "http://localhost:8081/rest/itemcat/list?callback=myFunction", 
     success: function(data){
      console.info(data)
   }}); 
 });

结果

XMLHttpRequest cannot load http://localhost:8081/rest/itemcat/list?callback=myFunction. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access.

2、模拟JSONP请求

客户端请求代码:

$(function(){
  greateScript("http://localhost:8081/rest/itemcat/list");
  function greateScript(src) {
   $("<script><//script>").attr("src", src).appendTo("body")
  } 
 });

结果:

list?_=1488425374097:1 Uncaught SyntaxError: Unexpected token :

三、使用JSONP

环境:

服务器域名:http://localhost:8081/rest/itemcat/list

客户端服务器:http://localhost:8082/test.html

服务端代码(本人使用springmvc4):

@RequestMapping("/itemcat/list")
 @ResponseBody
 public Object getItemCatList(String callback) {
  CatResult catResult = itemCatService.getItemCatList();
  MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
  //设置JSONP回调函数
  mappingJacksonValue.setJsonpFunction(callback);
  return mappingJacksonValue;
 }

客户端调用代码:

$(function(){
  $.ajax(
   { url: "http://localhost:8081/rest/itemcat/list", 
    dataType: "jsonp",
    jsonp: "callback",
    success: function(data){
    console.info(data)
   }}); 
 });

结果:

JSONP跨域请求

看返回结果可以发现返回的数据不是一段单纯的json数据,而是一段js函数。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
静态的动态续篇之来点XML
Dec 23 Javascript
jquery的ajax跨域请求原理和示例
May 08 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
Jan 30 Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 jQuery
JavaScript 数组的进化与性能分析
Sep 18 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
vue 进阶之实现父子组件间的传值
Apr 26 Javascript
小程序实现层叠卡片滑动效果
Aug 26 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
Nov 03 Javascript
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
Javascript之datagrid查询详解
Sep 15 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 #Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 #Javascript
如何正确理解javascript的模块化
Mar 02 #Javascript
jquery实现左右滑动式轮播图
Mar 02 #Javascript
如何写好你的JavaScript【推荐】
Mar 02 #Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 #Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 #Javascript
You might like
完美的php分页类
2017/10/24 PHP
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
python求crc32值的方法
2014/10/05 Python
python实现数独算法实例
2015/06/09 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
工地宣传标语
2014/06/18 职场文书
解除劳动合同协议书
2014/09/17 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
四年级作文之植物
2019/09/20 职场文书
python实现简易名片管理系统
2021/04/11 Python