为什么80%的码农都做不了架构师?>>>   

JSONP 原理其实是利用利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如:
<script src="http://www.example.net/api?param1=1&param2=2"></script>
并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。(解释摘录自知乎,作者:贺师俊)

jquery支持jsonp  在ajax请求时  只需将dataType 修改为 ‘JSONP’ 就可以实现Jsonp跨域请求

$.ajax({url: "http://.......",type: 'GET',dataType: 'JSONP',//标识此为JSONP请求jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数jsonpCallbackString:"callbackFunction",//用于代替jquery自动生成的函数名success: function (data) {}});

其中   jsonp 属性

在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。

jsonpCallbackString

为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。

同时     服务端返回值也需要修改

若需返回的值为{"name":"hccake","old","18"},

在使用jsonp的情况下服务端返回值应该为 callbackFunction({"name":"hccake","old","18"})

服务端代码eg


@Controller
public class JsonPController {  @RequestMapping("/jsonp")  public String exchangeJson(HttpServletRequest request,HttpServletResponse response) {  try {  //获取客户端请求的回调函数名   未使用jsop属性指定  则默认为callback//String jsonpCallback = request.getParameter("jsonpCallback");//若客户端使用jsonpCallbackString指定函数名  在服务端和客户端统一规范的情况下可以直接写死String  jsonpCallback = "callbackFunction";String reslutData = "{'name':'hccake','old','18'}";return jsonpCallback+"("+reslutData+")";//返回jsonp格式数据  } catch (IOException e) {  e.printStackTrace();  }  }
}  

转载于:https://my.oschina.net/hccake/blog/886585

解决403跨域问题之——————JSONP相关推荐

  1. jsonp解决ajax跨域问题,用JSONP解决ajax跨域问题

    JSONP:JSON With Padding 要点: 1.script标签 2.用script标签加载资源是没有跨域问题的 概要: 在资源加载进来之前先定义一个函数,这个函数接受一个参数(数据),函 ...

  2. 解决cookie跨域访问

    v一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入 ...

  3. 【JavaWeb】解决cookie跨域访问

    随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入cookie ...

  4. php json -gt;访问,【转】Php+ajax+jsonp解决ajax跨域问题

    首先:jsonp是json用来跨域的一个东西. 原理是通过script标签的跨域特性来绕过同源策略. 发送端: $.ajax({ type : "post", url : &quo ...

  5. 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案

    写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...

  6. PHP的介绍及应用,ajax的介绍及应用,跨域问题及jsonp解决方法

    PHP(服务器编程语言) 服务器由环境(Apache),数据库(mysql),代码(HTML+css +js,php)组成. PHP必须在服务器的环境下执行 php与js最大的区别就是工作环境,PHP ...

  7. 普元EOS中, 子系统和portal不在同一个域中,使用jquery的jsonp来解决portal跨域访问

    转至元数据起始 [背景] 子系统和portal不在同一个域中且项目中要求不能使用nginx.apache等反向代理软件,故使用jsonp从代码角度解决ajax跨域问题 [实现思路] 通过jquery的 ...

  8. 【node.js从入门到精通】编写接口,使用CROS解决跨域问题,jsonp的接口

    目录 ​编辑 前言 1. get接口 2.post接口 2.跨域问题 1.CROS是什么 2.使用CROS解决跨域问题 3.CORS请求的分类 4.编写jsonp的接口 写在最后 前言 接口是前后端的 ...

  9. jsonp跨域的缺点ajax缺点,浅析JSONP解决Ajax跨域访问问题的思路详解

    前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问 ...

  10. jQuery利用JSONP解决AJAX跨域请求

    出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即"同源策略".而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通信的效果. JSON(Ja ...

最新文章

  1. 无事“自动驾驶”,有事“辅助驾驶”?
  2. Docker系列 八.Docker下 Mysql 启动慢查询日志
  3. python3在线-荐python3在线编程输入输出总结
  4. 为什么python画不了图-python-为什么pygame不画一个圆?
  5. hdu-4549 M斐波那契数列 nyoj - 1000
  6. ffplay.c学习-7-以音频同步为基准
  7. c++远征之多态篇——虚函数及其实现原理
  8. getline()函数
  9. Java之Integer源码
  10. 线上课堂:ernetes Operator开发范式 - TiDB
  11. 触底事件_福建双外到位欲触底反弹,李宁回应易建联扔鞋事件,吉林主帅表态...
  12. 【图像处理】MATLAB:图像噪声
  13. Google 展示广告
  14. 抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)
  15. Linux学习笔记-exec族函数,system函数,popen函数的用法
  16. win7下笔记本电脑给手机开热点
  17. 绿城离职员工万言书全文,不看你后悔!当今很少有此类文言文!
  18. 港股2017年表现全球最好,区块链将助推新经济牛市?
  19. 二、TensorFlow2.x 基于图像的分类
  20. 【转】指定页面进行Monkey测试

热门文章

  1. 2.easyui 控件取值方式
  2. 向HtmlAgilityPack道歉:解析HTML还是你好用
  3. poj 1265 Area(pick 定理)
  4. ie下面兼容性问题的一些总结(转)
  5. Luence简单实现1
  6. centos6.7上使用nginx实现负载均衡!
  7. CentOS系列启动流程详解
  8. Mustache初识
  9. 协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议)
  10. Java线程入门第三篇