博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day23---ajax跨域解决---JSONP
阅读量:4679 次
发布时间:2019-06-09

本文共 1077 字,大约阅读时间需要 3 分钟。

做一个努力的搬运工,内容搬运来自:

JSONP方式解决跨域问题

jsonp解决跨域问题是一个比较古老的方案(实际中不推荐使用),这里做简单介绍(实际项目中如果要使用JSONP,一般会使用JQ等对JSONP进行了封装的类库来进行ajax请求)

实现原理

JSONP之所以能够用来解决跨域方案,主要是因为 <script> 脚本拥有跨域能力,而JSONP正是利用这一点来实现。具体原理如图

 

实现流程

JSONP的实现步骤大致如下(参考了来源中的文章)

  • 客户端网页网页通过添加一个<script>元素,向服务器请求JSON数据,这种做法不受同源政策限制

    function addScriptTag(src) { var script = document.createElement('script'); script.setAttribute("type","text/javascript"); script.src = src; document.body.appendChild(script); } window.onload = function () { addScriptTag('http://example.com/ip?callback=foo'); } function foo(data) { console.log('response data: ' + JSON.stringify(data)); };

    请求时,接口地址是作为构建出的脚本标签的src的,这样,当脚本标签构建出来时,最终的src是接口返回的内容

  • 服务端对应的接口在返回参数外面添加函数包裹层
foo({  "test": "testData"});
  • 由于<script>元素请求的脚本,直接作为代码运行。这时,只要浏览器定义了foo函数,该函数就会立即调用。作为参数的JSON数据被视为JavaScript对象,而不是字符串,因此避免了使用JSON.parse的步骤。

注意,一般的JSONP接口和普通接口返回数据是有区别的,所以接口如果要做JSONO兼容,需要进行判断是否有对应callback关键字参数,如果有则是JSONP请求,返回JSONP数据,否则返回普通数据

使用注意

基于JSONP的实现原理,所以JSONP只能是“GET”请求,不能进行较为复杂的POST和其它请求,所以遇到那种情况,就得参考下面的CORS解决跨域了(所以如今它也基本被淘汰了)

转载于:https://www.cnblogs.com/Mr-Car/p/10795299.html

你可能感兴趣的文章
说说ID选择符、类选择符和HTML标记选择符的优先级顺序
查看>>
浅谈软件架构师的素质与职责
查看>>
Python生成器实现杨辉三角打印
查看>>
ElasticSearch集群搭建
查看>>
解决EntityFramework数据库无法自动迁移解决方法
查看>>
ElasticSearch 基本操作
查看>>
unity 中 Tilemap的使用 笔记
查看>>
sort()的多种用法
查看>>
UNIX C 文件权限 Part2_day01
查看>>
linux部署Oracle数据库--创建数据库
查看>>
[LeetCode] 148. Sort List 链表排序
查看>>
Java判断密码强度工具类
查看>>
阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第1课-Epoll机制精通...
查看>>
jmeter(四十四)常用性能指标分析
查看>>
6个出色的基于JQuery的Tab选项卡实例2010/01/29 16:261. jQuery 选项卡界面 / 选项卡结构菜单教程...
查看>>
F - 八苦を滅した尼公 POJ - 2763 线段树LCA
查看>>
通过jQuery源码学习javascript(一)
查看>>
源码阅读经验谈-slim,darknet,labelimg,caffe(1)
查看>>
SecureCRT配色方案
查看>>
Unity3D 关于yield在collider中的使用
查看>>