【Ajax进阶】跨域和JSONP的学习
创始人
2024-01-25 03:52:02
0

csdn动态图标

✍️ 作者简介: 前端新手学习中。

💂 作者主页: 作者主页查看更多前端教学

🎓 专栏分享:css重难点教学   Node.js教学 从头开始学习   ajax学习

文章目录

  • 了解同源策略和跨域
    •   同源策略
      •     什么是同源
      •     什么是同源策略
    •   跨域
      •     什么是跨域
      •     浏览器对跨域请求的拦截
      •     如何实现跨域数据请求
  • JSONP
    •   JSONP的实现原理
    •   自己实现一个简单的JSONP
    •   JSONP的缺点
    •   jQuqery中的JSONP
    •   自定义参数及回调函数的名称
    •   jQuery中JSONP的实现过程
  • 案例——淘宝搜索
    •   效果
    •   代码
  • 防抖和节流
    •   什么是防抖
    •   防抖的应用场景
    •   实现防抖
    •   什么是节流
    •   节流的应用场景
    •   鼠标跟随案例
    •   总结防抖和节流的区别

了解同源策略和跨域

  同源策略

    什么是同源

如果两个页面的协议,域名和端口都相同,则两个页面具有相同的源。

例如,下表给出了相对于http://www.test.com:80/index.html 端口号不写,默认为80.。

  • http(协议)
  • www.test.com (域名)
  • 80 (端口)

在这里插入图片描述

    什么是同源策略

同源策略(英文全称 Same origin policy)是浏览器提供的一个安全功能。
MDN官方给定的概念:同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的重要安全机制。
通俗的理解:浏览器规定,A网站的JavaScript,不允许和非同源的网站C之间,进行资源的交互,例如:
1.无法读取非同源网页的Cookie,LocalStorage和IndexedDB。
2 无法接触非同源网页的DOM。
3 无法向非同源地址发送Ajax请求。

  跨域

    什么是跨域

跟同源相反,同源指的是两个URL的协议,域名,端口号一致,反之,则是跨域。
出现跨域的根本原因:浏览器的同源策略不允许非同源的URL之间进行资源的交互。
在这里插入图片描述

    浏览器对跨域请求的拦截

在这里插入图片描述

    如何实现跨域数据请求

现如今,实现跨域数据请求,最主要的两种解决方案,分别是JSONP和CORS。
JSONP:出现的早,兼容性好。是前端程序员为了解决跨域问题,被迫想出来的一种临时解决方案,缺点是只支持GET请求,不支持POST请求。
CORS:出现的较晚,它是W3C标准,属于跨域Ajax请求的根本解决方案,支持GET和POST请求,缺点是不兼容某些低版本的浏览器。

JSONP

  JSONP的实现原理

由于浏览器同源策略的限制,网页中无法通过Ajax请求非同源的接口数据。但是

在这里插入图片描述
图中标红的这一段表示跨域,在这里插入图片描述
因为我们的协议是本地file,所以会跨域,之前能访问成功,是因为后端配置了cors所以才能成功访问。

  自己实现一个简单的JSONP

定义一个success回调函数

    

通过script标签,调用接口数据

//指定callback来调用 指定的函数,后端会根据接受到的这个函数改变函数名。

在这里插入图片描述
在这里插入图片描述

我们通过这个方法调用之前跨域的链接

//直接从链接后面写上附带的数据。

在这里插入图片描述
发起的并不是ajax请求,所以跳过了同源策略,请求成功。
在这里插入图片描述

  JSONP的缺点

由于JSONP是通过script标签的src属性,来实现跨域数据获取的,所以,JSONP支持get数据请求,不支持POST请求,只能默认发起get请求。

注意:JSONP和Ajax之间没有任何关系,不能把JSONP请求数据的方式叫做Ajax,因为JSONP没有用到XMLHttpRequest这个对象。
在这里插入图片描述

  jQuqery中的JSONP

jquery提供的$.ajax()函数,除了可以发起真正的Ajax数据请求之外,可以通过改变数据类型使其能够发起JSONP数据请求。

        $.ajax({url: 'http://www.liulongbin.top:3006/api/jsonp?name=xiaoixe&age=20',dataType: 'jsonp',success: function (res) {console.log(res);}})

在这里插入图片描述

默认情况下,使用jQuery发起post请求,会自动携带一个callback=jQueryxxx的参数,jQueryxxx是随机生成的一个回调函数名称。

  自定义参数及回调函数的名称

        $.ajax({url: 'http://www.liulongbin.top:3006/api/jsonp?name=xiaoixe&age=20',dataType: 'jsonp',//自定义参数jsonp: 'cb',//自定义函数名称jsonpCallback: 'hanshu',success: function (res) {console.log(res);}})

  jQuery中JSONP的实现过程

jQuery中的JSONP,也是通过script标签的src属性实现跨域数据访问的,只不过,jquery采用的是动态创建和移除script标签的方式,来发起的JSONP的数据请求。

  • 在发起JSONP请求的时候,动态向header中append一个script标签
  • 在JSONP 请求成功后,动态从header中移除刚才append进去的script标签

案例——淘宝搜索

  效果

实现搜索框,文字提示效果。
在这里插入图片描述

  代码


Document
宝贝
店铺

防抖和节流

  什么是防抖

防抖策略是当事件被触发后,延迟n秒后再执行回调,如果在这n秒内事件又被触发,则重新计时。
在这里插入图片描述

  防抖的应用场景

用户在输入框中连续输入一串字符时,可以通过防抖策略,只在输入完后,才执行查询的请求,这样可以有效减少请求次数,节约请求资源;

  实现防抖

在这里插入图片描述

  什么是节流

节流策略,顾名思义,可以减少一段时间内事件的触发频率。

在这里插入图片描述

  节流的应用场景

  1. 鼠标连续不断的触发事件(如点击),只在单位时间内触发一次;
  2. 懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算机的频率,而不必去浪费CPU资源。

  鼠标跟随案例

无节流代码


Document


节流阀

节流阀为空,表示可以执行下次操作,不为空表示不能执行下次操作。
当前操作执行完,必须将节流阀重置为空,表示可以执行下次操作。
每次执行操作前,必须先判断节流阀是否为空。

使用节流阀优化鼠标跟随效果


Document


在这里插入图片描述

  总结防抖和节流的区别

  • 防抖:如果事件被频繁触发,防抖能保证只有一次触发生效,前面的多次触发都会被忽略
  • 节流:如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流是有选择性的执行一部分事件。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...