Ajax即Asynchronous Javascript And XML(异步JavaScript和XML),在2005年提出,是一种描述使用现有技术集合的‘新’方法,包括:HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 使用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请求是一种现代Web API,用于在JavaScript中发出HTTP数据请求。它是XMLHttpRequest的一种替代方案,提供了更加简洁和现代化的方式来处理网络请求。Fetch函数是原生JavaScript的一部分,不需要使用XMLHttpRequest对象。Fetch请求使用Promise来处理异步操作,这使得它的代码更加清晰和简洁。
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的主要区别在于它们的API设计、语法、错误处理、进度监测、以及对于跨域请求的处理。
总的来说,Fetch是现代化的、更灵活的方式来处理网络请求,特别适合使用在现代JavaScript应用中,而Ajax仍然在一些旧的应用和传统的环境中使用,并且有些情况下可能更容易上手。