什么是AJAX?

这里是修真院前端小课堂,每篇分享文从

八个方面深度解析前端知识/技能,本篇分享的是:

【什么是AJAX?】

大家好,我是 IT 修真院上海分院第八期的学员何岳,一枚正直纯洁善良的web程序员

今天给大家分享一下,修真院官网 JS任务五,深度思考中的知识点——什么是AJAX?

  1. 背景介绍

什么是AJAX?

async JavaScript and xml,异步的js和xml

ajax之所以称为异步的js和xml,主要原因是:当初最开始用ajax实现客户端和服务器端数据通信的时候,传输的数据格式一般都是xml格式的数据,所以把它称之为异步js和xml(现在一般都是基于json格式来进行数据传输的)

  1. 知识剖析

xml和异步的js

xml:可扩展的标记语言,作用是用来存储数据的(通过自己扩展的标记名称清晰的展示出数据结构)

xml:

<?xml version ="1.0" encoding ="UTF-8"?>
<student>

    <name>张三</name>

    <age>25</age>

    <socre>

        <english>100</english>

        <math>99</math>

        <chinese>89</chinese>

    </socre>

    <name>李四</name>

    <age>24</age>

    <socre>

        <english>99</english>

        <math>97</math>

        <chinese>98</chinese>

    </socre>

</student>

异步的js:这里的异步不是说ajax只能基于异步进行请求(虽然建议都是使用异步编程),这里的异步特指的是“局部刷新”

局部刷新vs全局刷新

全局刷新

在非完全前后端分离项目中,前端开发只需要完成页面的制作,并且把一些基础的人机交互效果使用js完成即可,页面中需要动态呈现内容的部分,都是交给后台做数据绑定和基于服务器进行渲染的(服务器端渲染)

局部刷新

前后端完全分离的项目,页面中需要动态绑定的数据是交给客户端完成渲染的

1.向服务器端发送ajax请求

2.把从服务器端获取的数据解析处理,拼接成需要展示的html字符串

3.把拼接好的字符串替换页面中的某一部分内容(局部刷新),页面整体不需要重新加载,局部渲染即可

基于原生实现ajax过程

ajax请求方式

1.get系列请求(获取)

(1)get

(2)delete:从服务器端删除某些资源文件

(3)head:只想获取服务器端返回的响应头信息(响应内容不需要获取)

(4)…

2.post系列请求(推送)

(1)post

(2)put:向服务器中增加指定的资源文件

(3)…

不管哪一种请求方式,客户端都可以把一些信息传递给服务器端,服务器端也可以把信息返回给客户端,只是get系列一般以获取为主(给的少,拿回来的多);post系列一般以推送为主(给的多,拿回来的少);

(1)如果想获取一些动态展示信息,一般使用get请求,因为只需要向服务器端发送请求,告诉服务器端想要什么,服务器端就会把需要的数据返回

(2)在实现注册功能的时候,需要把客户输入的信息发送给服务器端进行存储,服务器端一般返回成功还是失败等状态,此时我们一般都是基于post请求完成的

URL:请求数据地址(API地址)

真实项目中,后端会编写一个API文档,在API文档中汇总了获取哪些数据需要哪些地址,按照文档操作即可

[ASYNC]

ASYNC:异步

SYNC:同步

设置当前ajax请求是异步的还是同步的,不写默认是异步(true),如果设置为false,则代表当前请求是同步的

  1. 常见的问题

get和post的区别

  1. 解决方案

get系列请求和post系列请求,在真实项目中存在很多的区别:

1.get请求传递给服务器端的内容一般没有post传递给服务器端的多

原因:get请求传递给服务器端的内容一般都是基于URL地址问号传递参数来实现的;而post请求一般都是基于设置请求主体来实现的。各浏览器都有自己关于url最大长度的限制(谷歌:8kb,火狐:7kb,IE:2kb…),超过限制长度的部分,浏览器会自动截取掉,导致传递给服务器的数据缺失。理论上post请求通过请求主体传递是没有大小限制的,真实项目中为了保证传输的速率,也会限制大小(比如上传的资料或者图片会做大小的限制)

2.get请求很容易出现缓存(这个缓存不可控:一般我们都不需要),而post不会出现缓存(除非自己做特殊处理)

原因:get是通过url问好传参传递给服务器信息,而post是设置请求主体,设置请求主体不会出现缓存,但是URL问号传参就会

3.get请求没有post请求安全(post也不是十分安全,只是相对安全)

原因:get是通过url问好传参传递给服务器信息。有一种比较简单的黑客技术:URL劫持,也就是可以把客户端传递给服务器端的数据劫持掉,导致信息泄露

  1. 编码实战

  2. 扩展思考

全局刷新的优缺点

[优点]

1.动态展示的数据在页面的源代码中可以看见,有利于SEO优化推广(有利于搜索引擎的收录和抓取)

2.从服务器端获取的结果就已经是最后要呈现的页面了,不需要客户端做额外的事情,所以页面加载速度快(前提是服务器端处理速度够快,能够处理过来),所以类似jd,taobao这些网站的首屏数据都是经由服务器端渲染的

[缺点]

1.如果页面中存在需要实时更新的数据,每一次想要展示最新的数据,页面都要重新刷新一次,这样是不行的

2.都交给服务器做数据渲染,服务器端压力太大,如果服务器端处理不过来,页面呈现的速度更慢(所以jd,taobao这类网站除了首屏是服务器端渲染的,其他屏都是客户端做数据渲染绑定)

3.这种模式不利于开发(开发效率低)

  1. 参考文献

https://www.cnblogs.com/smyhvae/p/8485028.html

8.讨论问题:

问:

1.局部刷新的优缺点?

2.AJAX的状态码?

3.ajax中其他常用的属性和方法

答:

1.[优点]

a.可以根据需求,修改页面中某一部分的内容(例如实时刷新),整体页面不刷新,性能好,体验好(所有表单验证,需要实时刷新的需求都要基于ajax实现)

b.有利于开发,提高开发的效率

(1)前后端完全分离,后台不需要考虑前端如何实现,前端也不需要考虑后端用什么技术,真正意义上实现了技术的划分

(2)可以同时进行开发:项目开发开始,首先制定前后端数据交互的接口文档(文档中包含了调取哪个接口或者那些数据等协议规定),后台把接口先写好

[缺点]

a.不利于SEO优化:第一次从服务器端获取的内容不包含需要动态绑定的数据,所以页面的源代码中没有这些内容,不利于SEO收录,后期经过js添加到页面中扥内容,并不会写在页面的源代码中(是源代码不是页面结构)

b.交由客户端渲染,首先需要把页面呈现,然后通过js异步ajax请求获取数据,然后数据绑定,浏览器把动态增加的部分重新渲染,无形中浪费了一些时间,没有服务器渲染页面呈现速度快

  1. xhr.readyState

0:UNSENT 未发送,只要创建一个ajax对象,默认就是零

1:OPENED 已经执行了xhr.OPEN这个操作

2:HEADERS_RECEIVED 当前ajax的请求已经发送,并且已经接收到服务器端返回的响应头信息了

3:LOADING 响应主体内容正在返回的路上

4:DONE 响应主体内容已经返回到客户端

  1. 通过let xhr = new XMLHttpRequest();

console.dir(xhr); 可以看到所有的属性和方法

感谢观看, 如有出错, 恳请指正

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值