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 相关文章推荐
两个SUBMIT按钮,如何区分处理
Aug 22 Javascript
Prototype 工具函数 学习
Jul 23 Javascript
Mootools 1.2教程 正则表达式
Sep 15 Javascript
js中onload与onunload的使用示例
Aug 25 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
Sep 24 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 Javascript
全新打包工具parcel零配置vue开发脚手架
Jan 11 Javascript
vue 父组件调用子组件方法及事件
Mar 29 Javascript
VUE实现强制渲染,强制更新
Oct 29 Javascript
jdk1.8+vue elementui实现多级菜单功能
Sep 24 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
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
javascript的this关键字详解
2019/05/20 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
深入理解Python中装饰器的用法
2016/06/28 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
Python实现图片添加文字
2019/11/26 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
信息管理专业推荐信
2013/10/29 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
安全协议书范本
2014/04/21 职场文书
政治学求职信
2014/06/03 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
认真学习保证书
2015/02/26 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书