Ajax跨域处理详解及jsonp和其原理-带视频

出于浏览器的同源策略限制,不同站点之间的数据一般是不共享的,在A站点中去拿B站点的数据时就会产生一个跨域问题。

只要浏览器中报错的关键字包含`CORS`,都可以认为是产生了跨域问题

一、跨域

出于浏览器的同源策略限制,不同站点之间的数据一般是不共享的,在A站点中去拿B站点的数据时就会产生一个跨域问题。

只要浏览器中报错的关键字包含CORS,都可以认为是产生了跨域问题。

注意,不同的协议、端口号、域名、二级域名等都是不同的站点。

比如以下都会产生跨域问题:

imqd.cn与a.imqd.cn 二级域名不同

www.imqd.cn与 www.imqd.cn:8080 端口不同

http://www.imqd.cnhttps://www.imqd.cn 协议不同

但是如果只有路径不同,则不存在跨域:

www.imqd.cn/a

www.imqd.cn/b

二、如何解决跨域问题

  1. 让数据站点开放访问权限,几乎不可能,除非是自家公司,或对方选择开放
  2. 通过JSONP光明正大的去拿-JSONP是用来解决跨域问题的

三、数据为王,如何知道JSONP的地址

1、问后端(除非是自己的公司)

2、通过网络面板获取(技巧)

a、打开浏览器的开发者工具
b、清空网络面板
c、发送一个请求,比如输入内容,看看网络面板的请求状态,找下有没有xhr等
d、点击打开该网络地址,看看是不是数据源

以上步骤请参考上方视频。

四、JS中如何实现跨域(即跨域原理)

JSONP的含义:jsonp==json with padding

问题:为什么JSON数据要放到函数里。

跨域一般的json数据用不了,只能用jsonp数据。

实现原理:

​ 1、使用script标签引入数据(将json数据放入函数调用的参数中)

​ 2、定义函数,函数即为上面的函数

​ 3、在定义的函数内使用传过来的数据

​ 4、优化:将script带来的数据作为动态加载,只有需要的时候才请求,这样就做到了类似于ajax的效果

看不太明白?下方添加web前端老罗的微信,为你解答。

三、jQuery怎么使用jsonp

jquery对jsonp进行一次重新包装,看起来跟ajax一模一样。

$.ajax({
         url:"jsonp地址",
         dataType:"jsonp", //这里的类型要改为jsonp
         jsonp:'回调函数的名字', //一般填写url中包含有cb或callback
         // 获取成功后的回调函数
         success:function(res){
         },
         // 如果获取失败,则执行下面的回调函数
         error:function(err){
            console.log('失败了')
         }
});

比如:

jsonp的地址为:

https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery3410994497906717867_1580475331590

那么在jquery中可以这样写:

$.ajax({
         url:"https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5",
         dataType:"jsonp", //这里的类型要改为jsonp
         jsonp:'callback', //一般填写url中包含有cb或callback
         // 获取成功后的回调函数
         success:function(res){
         },
         // 如果获取失败,则执行下面的回调函数
         error:function(err){
            console.log('失败了')
         }
});

以上代码复制后到html中,直接在浏览器中打开即可在浏览器控制台看到效果,不需要服务器环境。

除特别声明外, 本站所有内容皆为原创,未经许可,禁止转载。转载时请务必以超链接形式标明文章出处和作者信息
  • 553
(0)
打赏 微信扫一扫 微信扫一扫

关于作者:

web前端老罗

贡献:已经在WEB前端圈发表89篇文章了,你也来试试

简介:前端老罗是一位拥有多年web前端开发经验、管理经验、教学经验的实战派全栈工程师。目前在某名企任职WEB前端技术教官。加我微信:imqdcnn可提供开发、技术咨询、答疑、直播讲座等服务

Ta的专栏 | Ta的站点 | 其他SNS

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关于WEB前端圈

我是前端人(imqd.cn)愿景是不管你是想学习前端还是一名专业的WEB前端工程师在这里都能找到你想要的物料。定位为前端人学习进步的一个平台。在这里你能找到前端学习笔记、教学视频资源、案例、前后端分离、前端框架、低代码平台、可视化数据、多端开发、全栈开发等跟前端有关的一切资源!

关于站长:WEB前端老罗(罗老师)是一位拥有多年web前端开发经验、管理经验、IT培训教学经验的实战派全栈工程师。目前在某名企任职WEB前端技术教官。右边加我微信可提供开发、技术咨询、答疑、直播讲座等服务

WEB前端圈二维码

右边添加老罗微信一对一免费私聊
拉你加入官方微信答疑群

To top