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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
JS中showModalDialog 的使用解析
Apr 17 Javascript
JQ获取动态加载的图片大小的正确方法分享
Nov 08 Javascript
动态创建script标签实现跨域资源访问的方法介绍
Feb 28 Javascript
JavaScript避免代码的重复执行经验技巧分享
Apr 17 Javascript
jQuery淡入淡出元素让其效果更为生动
Sep 01 Javascript
js读取json的两种常用方法示例介绍
Oct 19 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
通过AngularJS实现图片上传及缩略图展示示例
Jan 03 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
angularjs 缓存的使用详解
Mar 19 Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 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
用session做客户验证时的注意事项
2006/10/09 PHP
20个最新的jQuery插件
2012/01/13 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
js实现进度条的方法
2015/02/13 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
JS实现百度搜索框
2021/02/25 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
Python类的基础入门知识
2008/11/24 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
python让函数不返回结果的方法
2020/06/22 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
工作表现评语
2014/01/19 职场文书
建房协议书
2014/04/11 职场文书
中班幼儿评语大全
2014/04/30 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
支行行长竞聘报告
2014/11/06 职场文书
学习十八大的感悟
2015/08/11 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
我的收音机情缘
2022/04/05 无线电