【Ajax进阶】跨域和JSONP的学习
创始人
2024-04-08 23:24:08
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


在这里插入图片描述

  总结防抖和节流的区别

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

相关内容

热门资讯

宁夏西吉县法官马春刚调解时突发... 西吉县人民法院综合审判庭副庭长马春刚,在调解纠纷时突发心脏病倒在办公桌前,12月12日,经抢救无效不...
3比0击败中国香港队 U15国... 12月22日,U15国足在U15东亚杯最后一轮比赛中3比0击败中国香港队。3战1胜1平1负积4分,因...
行政调解丨未成年私购手机退货难... 齐鲁晚报·齐鲁壹点记者 范佳 家住菏泽市东明县的12岁男孩小明(化名)未经监护人同意,私自购买了一...
泌阳县检察院对附条件不起诉未成... 为切实提升附条件不起诉考察帮教实效,强化涉罪未成年人法律意识,近日,泌阳县人民检察院在“检校社家工作...
城口:“周木文法律服务工作室”... 在城口,一个由退休法律工作者组成的公益团队——“周木文法律服务工作室”,正以其专业与热忱,为外卖骑手...
河南:持续扩大生育保险覆盖面,... 观点网讯:12月22日,河南印发《河南省加快完善生育支持政策体系推动建设生育友好型社会若干政策措施》...
雪在路上了!北京今夜局地中雪,... 北京市气象台22日14时发布,今天白天晴转阴,北转南风二三级,最高气温3℃;夜间阴转小雪或零星小雪,...
中国导弹打中国无人机!柬埔寨首... 就在柬埔寨方面传出,柬埔寨军队将中国制造的TH-5711“智能猎手”野战防空导弹系统和前卫-3防空导...
“支持起诉+”让检察温度可感可... 法治日报记者 周文馨 赵志锋 法治日报通讯员 宋琴琴 农民工讨薪难、老年人被遗弃、未成年人权益受侵害...
罗永浩痛批电信宽带“缩水”:斗... 近年来,随着“千兆宽带”的普及,罗永浩痛批电信宽带“缩水”问题再次成为公众关注的焦点。 12月18日...