在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。
jsonp通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。
知道jsonp跨域的原理后我们就可以用js动态生成script标签来进行跨域操作了,而不用特意的手动的书写那些script标签。如果你的页面使用jquery,那么通过它封装的方法就能很方便的来进行jsonp操作了。

ajax版本

<script>$.ajax({type: "get",url: "http://localhost:8070/pc/auth/logout",dataType: "jsonp",jsonp: "callback",jsonpCallback:"jsonpCallback",data: {"user_id":"4AE1D1B6816049B1"},success: function(json){alert('json:' + JSON.stringify(json));},error: function(){alert('fail');}});</script>

jQuery版本:

<script>$.getJSON("http://localhost:8080/login?callback=?",function(data){  alert(data);});
</script>

jquery会自动生成一个全局函数来替换jsonpCallback=?中的问号,之后获取到数据后又会自动销毁,实际上就是起一个临时代理函数的作用。$.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。

java后端:

if (supportJsonp(request)) {jsonpWrapper(request, response, res);return null;} else {return res;}protected boolean supportJsonp(HttpServletRequest request) {String cb = request.getParameter("callback");if (cb != null) {return true;} else {return false;}}protected void jsonpWrapper(HttpServletRequest request, HttpServletResponse response,Object entity) {String cb = request.getParameter("callback");response.setHeader("Access-Control-Allow-Origin", "*");response.setContentType("text/javascript");try {Writer out = response.getWriter();out.write(cb + "(");((PrintWriter) out).print(Tools.toJSONString(entity));out.write(");");} catch (IOException e) {e.printStackTrace();}}

jsonp跨域原理及使用相关推荐

  1. jsonp 跨域原理详解

    转载至:http://zha-zi.iteye.com/blog/1975116 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制 ...

  2. jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求

    推荐一个读者做的不错的编程学习网站: 网站:潜安 域名:http://www.qianani.com 另外将会不定期推送近期网站用到的一些技术,讲一些核心原理,今天为第一篇 问题由来: 最近一直在优化 ...

  3. jsonp跨域原理_Rust 搭建可跨域访问服务器JsonP(一)

    最近有一个项目极有可能需要一个可跨域的服务器做一个中转,思来想去决定用Rust来实现这个服务器,因为有如下优点. 1.编译体积小 2.跨平台 3.安全性较高 JsonP(JSON with Paddi ...

  4. 白话之jsonp跨域原理分析

    一.针对跨域请求,我们首先要知道什么是同源策略. 同源策略即是指:域名,协议,端口相同,三者中有一者不一致,为了安全考虑我们所在的服务器是无法获得想要访问资源所在服务器的资源的. 如图: 比如我们在l ...

  5. ajax的jsonp原理,jsonp 跨域原理和用法(上篇)

    出于对网站安全性的要求,两个不同域名的网站之间是不能通过前端技术互相发送请求的.但有时我们又需要使用这样的机制.比如:网站需要制作一个天气预报插件,或者需要开发两个网站,一个供外部用户使用,一个供内部 ...

  6. javascript实现jsonp跨域问题+原理

    在工作中往往存在跨域的问题 ,跨域是什么概念就不在这里了,搜这类问题的肯定已经知道了.下面直接探讨jsonp跨域原理 jspon跨域原理: 1.动态创建一个script标签 var script = ...

  7. JSONP跨域原理和jQuery.getJSON用法

    JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式).本文主要介绍JS ...

  8. 【漏洞利用】JSONP跨域请求漏洞 挖掘、利用详解

    参考文章 轻松搞定JSONP跨域请求 jsonp跨域原理,使用以及同源策略 跨域漏洞丨JSONP和CORS跨域资源共享 Tag: Ref: [[019.同源策略]] 本片文章仅供学习使用,切勿触犯法律 ...

  9. .net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器...

    1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.We ...

最新文章

  1. 第三周项目四-穷举法解决组合问题(1)
  2. PHP基础知识(三)
  3. dbcontext mysql_mysql – ‘DbContextOptionsBuilder’不包含’UseSqlServer’的定义
  4. c# TCP高性能通信
  5. Linux CentOS 7 安装 JAVA(jdk-8u181-linux-x64)
  6. 20155322 《Java程序设计》课堂实践项目 数据库-3-4
  7. WP Condition:wordpress的性能监测
  8. 利用JS实现 TABLE的分页
  9. Java Web Start简介
  10. 【Hadoop】新旧Java MapReduce API的差异
  11. Linux 开发中的常用命令 ( Cygwin 环境也同样适用)
  12. eXosip订阅问题分析
  13. ffmpeg 视频转码
  14. html5 保存后退,Html5 页面后退并刷新
  15. 【Linux系列文章】磁盘、进程
  16. 无线路由器信号互相干扰怎么办
  17. sklearn分类算法-决策树、随机森林
  18. vue3中的provide/inject(提供/注入)
  19. ANSYS|workbench输出梁的剪力图和弯矩图
  20. 网站安全监控的意义何在?

热门文章

  1. OFD文件、pdf文件相互转换、ofd文件在线预览
  2. AngularJs轻松入门(七)多视图切换
  3. 万有引力太阳系行星轨迹模拟
  4. IE 获取 本地 Mac地址
  5. 一定要时常清理QQ的七个文件夹(时间长占内存超大!)
  6. React-mentions 基本使用
  7. 数据结构 —— 双向链表(超详细图解 接口函数实现)
  8. vue 中监听document.body.scrollTop 值总为0的解决方法
  9. APC型光纤活动连接器有何特点?适合使用在什么场景?
  10. 网优5g前景_5G网络优化师前景怎么样?