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 相关文章推荐
JQuery Ajax通过Handler访问外部XML数据的代码
Jun 01 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
js分页代码分享
Apr 28 Javascript
alert和confirm功能介绍
May 21 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
Vue Element使用icon图标教程详解(第三方)
Feb 07 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
Aug 23 Javascript
Vue如何基于es6导入外部js文件
May 15 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 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 utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
python实现超简单端口转发的方法
2015/03/13 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
python 循环数据赋值实例
2019/12/02 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
python os模块在系统管理中的应用
2020/06/22 Python
Python通过len函数返回对象长度
2020/10/22 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
企业负责人任命书
2014/06/05 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
2014国庆节标语口号
2014/09/19 职场文书
物业工程部岗位职责
2015/02/11 职场文书
永不妥协观后感
2015/06/10 职场文书
红色经典观后感
2015/06/18 职场文书
cf战队宣传语
2015/07/13 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python