ajax和jsonp没有半点关系,跨域问题

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-29 16:04   11   0

jsonp确实和ajax没有半毛钱关系,只算是一种机制跨域数据获取方案或者协议。
只是说很多库(比如jquery)里面对jsonp和ajax做了一样的封装,看起来就好像jsonp是ajax的一部分一样,这好像会造成误解。

ajax是使用js内置的对象进行网络请求获取数据

jsonp是使用script当中的src来获取数据

什么时候跨域

一个域名访问另外一个域名

什么时候出现要跨域情况

1、以下是造成跨域的一些情况,只有目录路径不同才是同源地址

140813_P6RB_2949632.png

跨域的直观认识

一个域名地址需要访问另外一个域名地址的数据

为什么会有跨域?

-->说白了是为了数据的安全

出于安全性考虑,浏览器不允许ajax跨域获取数据

浏览器为了保证数据的安全,不允许直接请求使用别的域名数据。浏览器做了一个拦截。其实数据已经响应到了浏览器。浏览器没有把它给我们,不会随意注入你的浏览器。例如黑客会通过重定向把一些你不想打开的网页在你的浏览器中打开

是谁导致了跨域?

-->浏览器

需求:当用户当请求一个地址要拿到里面的数据展示在自己的域名当中

现实:拿不到数据显示在自己的域名当中

原因:当你访问地址的时候,实际上数据已经从别的域名拿过来了(可以从network上的接收包查看),但是浏览器为了保障不被信用的数据注入本地,进行了拦截。

解决跨域的两种方法

1、在浏览器安装插件(自己百度)

2、通过src实现跨域方案

讲第二种方法之前先了解一下基本概念:

使用src内容请求是不会存在跨域问题,在服务器端,返回js语句是可以直接运行。

服务器或者说后台(php)不存在跨域问题,当遇到跨域问题时通过PHP文件(自身文件)进行访问。

所以通过第二种方式解决跨域,必须前后台的合作才能私行(前台传callback参数,后台服务器接收callback并返回数据)。步骤:

0.在前端定义一个function.
function fn(res) {
alert(res);
}
1.通过<script src=> 向服务器发送一个请求。 在发送请求过程当中。把function的名称做为参数传给服务器。
<script src="get.php?callback=fn"></script>
2.服务器接收callback值。
$fn = $_GET['callback'];
3.在返回时,在接收参数这后面拼接一个括号。
如果想要传递数据,就把数据放到括号当中。
echo $fn.'("xmg123")';
4.就会执行前端定义的function
fn("hello");

jsonp不是使用xhr对象发送请求,而是创建一个script标签,标签的src属性设置成要请求的URL。当标签插入dom时浏览器就会自动请求这个URL,并把结果当做js代码执行。这样做的优点是跨域,缺点是只能使用get,而且不能设置header。因为请求完全不受js控制
jsonp的限制是来源于src的限制,src是不可能做到post请求的

有一篇讨论帖可以解答 https://segmentfault.com/q/1010000004884037

转载于:https://my.oschina.net/u/2949632/blog/812474

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP