Ajax异步请求的工作原理拆解、同步请求和异步请求的区别

Ajax(Asynchronous JavaScript and XML,异步的 JavaScript 和 XML)是一种通过使用 XMLHttpRequest对象与服务器进行异步通信的技术。主要功能是在不重新加载整个页面的情况下更新部分页面内容,提高用户体验。

同步请求和异步请求

同步请求异步请求区别在于,请求发送后 是否需要等待响应返回 才能继续执行后续的代码。

1、同步请求

同步请求是指在发送请求后,需要等待服务器响应后才能执行后续的代码。

也就是说,在发送请求时,代码会被阻塞,直到服务器返回响应结果为止。因此,同步请求会阻塞页面的加载,从而影响用户体验。

2、异步请求

异步请求是指在发送请求后,不需要等待服务器响应,可以继续执行后续的代码。当服务器返回响应结果时,会触发相应的回调函数来处理响应数据,从而更新部分网页内容,提高用户体验。

3、理解

拿生活中的例子类比来说,就像我们泡泡面的过程,要泡泡面肯定需要烧开水,把请求看作是烧开水这个步骤。同步请求就等于是在烧开水的时候,什么都不做,等开水烧好之后,再进行打开泡面,放调料,然后加水等操作。而在异步请求时,烧开水的过程中,就可以打开泡面放调料了,还可以找个你喜欢的剧看着,等开水烧开的时候再加开水即可。就用户的角度而言,肯定是异步请求的体验会好一些。

Ajax异步请求的实现过程

1、创建核心对象XMLHttpRequest。

XMLHttpRequest是 Ajax的基础,用于与服务器进行通信。

var xmlhttp = new XMLHttpRequest();

2、建立连接

调用XMLHttpRequest对象的open方法,设置请求方式、请求URL、是否为异步请求等参数.

xmlhttp.open("GET", "ajaxServlet?username=lisa", true);

3、发送请求。

调用send方法发送请求。

xmlhttp.send();

4、接受并处理响应结果

当XMLHttpRequest对象的就绪状态改变时,触发事件onreadystatechange,在XMLHttpRequest对象的就绪状态readyState为4且访问状态码为200时,获取服务器返回结果,并进行页面更新等操作。

xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
      var responseText = xmlhttp.responseText;
	  alert(responseText);
  }
};

5、完整的Ajax异步请求

//创建核心对象
var xmlhttp = new XMLHttpRequest();
//设置请求方式、URL、是否异步,建立连接
xmlhttp.open("GET", "ajaxServlet?username=lisa", true);
//发送请求
xmlhttp.send();
//接收并处理响应结果(onreadystatechange事件触发)
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
      var responseText = xmlhttp.responseText;
	  alert(responseText);
  }
};

XMLHttpRequest对象的三个重要属性

(1)onreadystatechange事件

当请求被发送到服务器时,需要执行一些基于响应的任务。每当readyState改变时,就会触发 onreadystatechange事件。readyState属性代表就绪状态,存有XMLHttpRequest的状态信息。

(2)readyState

存有XMLHttpRequest 的状态,从0到4发生变化。

readyState值描述
0请求未初始化。XMLHttpRequest 对象已经创建,但是尚未调用 open() 方法。
1服务器连接已经建立。open() 方法已经被调用,但是 send() 方法尚未被调用。
2请求已接收。send() 方法已经被调用,请求已经被服务器接收,但是尚未开始处理。
3请求处理中。服务器正在处理请求。
4请求已完成,且响应已就绪。响应已经被服务器接收,可以通过 XMLHttpRequest 对象的 responseText 或 responseXML 属性来获取响应结果。

(3)status

表示 HTTP 状态码。它的取值范围为 100 ~ 599,分别表示不同的状态码。常见的状态码如下:

status状态码描述
200请求成功。
301请求的资源已被永久移动到新的 URL。
302请求的资源已被临时移动到新的 URL。
400请求无效。
401请求需要身份验证。
403服务器拒绝请求。
404请求的资源不存在。
500服务器内部错误。

JQuery方式实现异步请求

除了原生JS实现Ajax异步请求之外,JQuery也可以实现Ajax异步请求。

使用JQuery实现异步请求非常方便,可以使用JQuery的$.ajax()方法或者$.get()$.post()$.getJSON() 等简化方法来发送异步请求。

这里以 $.ajax() 方法为例:

$.ajax({
  url: '/api/data',
  type: 'POST',
  dataType: 'json',
  success: function(data) {
    console.log(data);
  },
  error: function() {
    console.log('请求出错');
  }
});

上面的代码通过$.ajax()方法发送一个POST请求,请求的URL为 /api/data,数据类型为 JSON。当请求成功时,会执行 success 回调函数并将响应数据作为参数传入使用;当请求失败时,会执行error回调函数并将打印错误提示。

相对于原生JS方式,使用 JQuery发送异步请求会更简单,可以大大提高开发效率。同时,JQuery 还提供了丰富的回调函数和错误处理机制,方便开发者进行异步请求的处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值