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

 更新时间:2024年07月22日 09:46:19   作者:www.www  
Fetch 被称之为下一代 Ajax 技术,内部采用 Promise 方式处理数据API 语法简洁明了,这篇文章主要给大家介绍了关于前端获取资源的方式(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 = new XMLHttpRequest()
    	// 监听onreadystatechange 事件,与服务端通信
    	request.onreadystatechange = function(e){
    		// 获取当前请求状态,readyState 的值为 4 ,表示整个请求过程完毕
    	    if(request.readyState === 4){ 
    	    	// 根据返回的状态码,判断当前请求是否成功返回
    	        if(request.status >= 200 && request.status <= 300){  
    	        	// 获取到服务端返回的结果
    	            console.log(request.responseText) 
    	        }else if(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简单实现:

	function ajax(url,suc,fail) {
	  var xhr = new XMLHttpRequest();
	    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简单实现:

	function fetch(url) {
	    return new Promise(function (resolve,reject) {
	        ajax(url,function (res) {
	            resolve(res);
	        },function (err) {
	            reject(err);
	        })
	    })
	}

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

三、fetch和ajax的区别

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

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

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

总结

到此这篇关于前端获取资源的方式(ajax、fetch)以及其区别的文章就介绍到这了,更多相关前端获取资源ajax、fetch内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在js文件中引入(调用)另一个js文件的三种方法

    在js文件中引入(调用)另一个js文件的三种方法

    这篇文章主要介绍了在js文件中引入(调用)另一个js文件的三种方法,帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下
    2020-09-09
  • JS定义网页表单提交(submit)的方法

    JS定义网页表单提交(submit)的方法

    这篇文章主要介绍了JS定义网页表单提交(submit)的方法,实例分析了javascript实现表单提交执行自定义函数的方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • es6 filter() 数组过滤方法总结

    es6 filter() 数组过滤方法总结

    这篇文章主要介绍了es6 filter() 数组过滤方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 详解前端自动化工具gulp自动添加版本号

    详解前端自动化工具gulp自动添加版本号

    这篇文章主要介绍了详解前端自动化工具gulp自动添加版本号 ,非常具有实用价值,需要的朋友可以参考下。
    2016-12-12
  • Bootstrap每天必学之标签页(Tab)插件

    Bootstrap每天必学之标签页(Tab)插件

    Bootstrap每天必学之标签页(Tab)插件,通过这个插件您可以把内容放置在标签页或者是胶囊式标签页甚至是下拉菜单标签页中,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • JavaScript内置对象math,global功能与用法实例分析

    JavaScript内置对象math,global功能与用法实例分析

    这篇文章主要介绍了JavaScript内置对象math,global功能与用法,结合实例形式分析了javascript中内置对象math与global的基本概念、功能及使用方法,需要的朋友可以参考下
    2019-06-06
  • JS中showModalDialog关闭子窗口刷新主窗口用法详解

    JS中showModalDialog关闭子窗口刷新主窗口用法详解

    这篇文章主要介绍了JS中showModalDialog关闭子窗口刷新主窗口用法,结合具体实例形式较为详细的分析了showModalDialog常见用法与相关使用技巧,需要的朋友可以参考下
    2017-03-03
  • js获取当前日期代码适用于网页头部

    js获取当前日期代码适用于网页头部

    大家在浏览网页时可能会注意到网页头部有个不错的时间在显示,看起来感觉不错于是自己也实现了一个,下面是具体的代码,感兴趣的朋友可以参考下哈
    2013-06-06
  • 用javascript修复浏览器中头痛问题的方法整理篇[译]

    用javascript修复浏览器中头痛问题的方法整理篇[译]

    我们提倡无论何时都尽可能地使用CSS,这样我们更容易取得成功.现在浏览器对CSS的支持已经非常好,肯定足以让你用来控制你的网页布局与排版.但,即使如此,还是有某些页面元素会在不同的浏览器下表现也不一样.
    2008-11-11
  • JS数组降维的几种方法详解

    JS数组降维的几种方法详解

    这篇文章主要介绍了JS数组降维的几种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论