0


前端获取资源的方式(ajax、fetch)及其区别

前端获取资源的方式及其区别

一、使用 ajax 请求

1. 什么是 ajax 请求

Ajax

Asynchronous Javascript And XML

(异步

JavaScript和XML

),在2005年提出,是一种描述使用现有技术集合的‘新’方法,包括:

HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT

, 以及最重要的

XMLHttpRequest

。 使用

Ajax

技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

2. ajax请求原理

  • 简单概述> > Ajax> > 的原理简单来说通过> > JavaScript> > 原生的> > XmlHttpRequest> > 对象来向服务器发异步请求,从服务器获得数据,然后再用> > JavaScript> > 来操作> > DOM> > ,从而实现页面更新。
  • 与服务端交互详细过程- 创建 Ajax的核心对象 XMLHttpRequest对象- 通过 XMLHttpRequest 对象的 open() 方法与服务端建立连接- 构建请求所需的数据内容,并通过XMLHttpRequest 对象的 send() 方法发送给服务器端- 通过 XMLHttpRequest 对象提供的 onreadystatechange 事件,监听服务器端的通信状态- 接受并处理服务端向客户端响应的数据结果- 根据响应结果操作DOM,将处理结果更新到 HTML页面中
  • 详细实现代码示例// 创建XMLHttpRequest对象const request =newXMLHttpRequest()// 监听onreadystatechange 事件,与服务端通信 request.onreadystatechange=function(e){// 获取当前请求状态,readyState 的值为 4 ,表示整个请求过程完毕if(request.readyState ===4){// 根据返回的状态码,判断当前请求是否成功返回if(request.status >=200&& request.status <=300){// 获取到服务端返回的结果 console.log(request.responseText)}elseif(request.status >=400){// 获取到服务端返回的错误信息 console.log("错误信息:"+ request.status)}}}// XMLHttpRequest 对象的 open() 方法与服务端建立连接 request.open('POST','http://xxxx')// 通过XMLHttpRequest 对象的 send() 方法将请求发送给服务端 request.send()

二、使用fetch请求

1. 什么是fetch请求

Fetch

请求是一种现代

Web API

,用于在

JavaScript

中发出

HTTP

数据请求。它是

XMLHttpRequest

的一种替代方案,提供了更加简洁和现代化的方式来处理网络请求。

Fetch

函数是原生

JavaScript

的一部分,不需要使用

XMLHttpRequest

对象。

Fetch

请求使用

Promise

来处理异步操作,这使得它的代码更加清晰和简洁。

2. fetch请求原理

  • fetch是基于原生的XMLHttpRequest对象来实现数据请求的。
  • 同时,fetch也是基于Promise实现链式调用的。
  • 则实现fetch的本质:就是实现ajax的封装以及Promise的实现。

通过以上

ajax

部分的讲解中,我们知道

ajax

可以通过

XMLHttpRequest

简单实现:

functionajax(url,suc,fail){var xhr =newXMLHttpRequest();
        xhr.open('POST',url,true);
        xhr.onreadystatechange=function(){if(xhr.readyState ==4){if(xhr.status ==200){suc(xhr.responseText)}else{
                    console.log(err);fail(xhr.responseText);}}};
        xhr.send(null);}

fetch可结合Promise和ajax简单实现:

functionfetch(url){returnnewPromise(function(resolve,reject){ajax(url,function(res){resolve(res);},function(err){reject(err);})})}

fetch调用之后返回的是一个Promise实例,可以直接调用Promise实例的then方法和catch方法获取请求结果或报错信息。

三、fetch和ajax的区别

Fetch和Ajax的主要区别在于它们的API设计、语法、错误处理、进度监测、以及对于跨域请求的处理。

  1. API设计方面 - Fetch是现代JavaScript中的API,使用Promise对象来处理异步操作,可以链式调用,使代码更易于理解和维护- Ajax是一种传统的技术,通常使用XMLHttpRequest对象来进行请求和响应的处理
  2. 语法和错误处理方面 - Fetch使用一种基于Promise的API风格,返回的是一个Promise对象,对于网络请求报错,对400、500都当做成功的请求,需要封装去处理- Ajax的语法相对较复杂,需要编写更多的代码来处理回调函数和状态,它通常使用回调函数来处理异步操作,可能会导致回调地狱的问题,尤其在复杂的请求链中
  3. 进度监测方面 - Fetch没有办法原生监测请求的进度- Ajax基于原生的XHR开发,可以监测
  4. 跨域请求方面 - Fetch对跨域请求有更严格的限制,因为它遵循了同源策略,如果需要进行跨域请求,需要在服务器端设置适当的CORS头(Cross-Origin Resource Sharing)以允许跨域请求- Ajax也受到同源策略的限制,但可以通过JSONP、代理服务器等技术来进行跨域请求
  5. 兼容性方面 Fetch基于Promise开发,Ajax相较于Fetch兼容性好一些

总的来说,Fetch是现代化的、更灵活的方式来处理网络请求,特别适合使用在现代JavaScript应用中,而Ajax仍然在一些旧的应用和传统的环境中使用,并且有些情况下可能更容易上手。

标签: 前端 ajax javascript

本文转载自: https://blog.csdn.net/qq_39454432/article/details/138160434
版权归原作者 www.www 所有, 如有侵权,请联系我们删除。

“前端获取资源的方式(ajax、fetch)及其区别”的评论:

还没有评论