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 还提供了丰富的回调函数和错误处理机制,方便开发者进行异步请求的处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ajax中,同步请求异步请求是两种不同的请求方式。 同步请求是指在发送请求后,浏览器会等待服务器返回响应后再继续执行后续的代码。也就是说,在同步请求中,浏览器会阻塞页面的加载和用户的交互,直到服务器返回响应为止。 异步请求是指在发送请求后,浏览器不会等待服务器返回响应,而是继续执行后续的代码。当服务器返回响应时,浏览器会触发相应的事件处理程序来处理响应。在异步请求中,页面的加载和用户的交互不会被阻塞,用户可以继续进行其他操作。 下面是一个示例代码,展示了同步请求异步请求的差别: ```javascript // 同步请求示例 var xhrSync = new XMLHttpRequest(); xhrSync.open('GET', 'https://example.com/api/data', false); // 第三个参数设置为false表示同步请求 xhrSync.send(); console.log(xhrSync.responseText); // 在请求完成后,直接获取响应内容 // 异步请求示例 var xhrAsync = new XMLHttpRequest(); xhrAsync.open('GET', 'https://example.com/api/data', true); // 第三个参数设置为true表示异步请求 xhrAsync.onload = function() { if (xhrAsync.status === 200) { console.log(xhrAsync.responseText); // 在事件处理程序中获取响应内容 } }; xhrAsync.send(); console.log('请求已发送'); // 在请求发送后,继续执行后续的代码 ``` 在上面的示例中,同步请求会阻塞代码的执行,直到服务器返回响应后才会继续执行后续的代码。而异步请求则不会阻塞代码的执行,可以在请求发送后继续执行后续的代码,待服务器返回响应时再触发事件处理程序来处理响应。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值