Ajax:
ajax,最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。
Jquery Ajax:
是jQuery框架中的发送后端请求技术,由于jQuery是基于原始的基础上做的封装,所以,jquery Ajax自然也是对原始ajax的封装
Fetch:
fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。但是,一定记住fetch不是ajax的进一步封装,而是原生js。Fetch函数就是原生js,没有使用XMLHttpRequest对象。
axios:
axios不是原生JS的,需要进行安装,它不但可以在客户端使用,而且可以在nodejs端使用。Axios也可以在请求和响应阶段进行拦截。同样也是基于promise对象的。
前端程序员常说的Ajax是 Asynchronous JavaScript and XML
的缩写,意思是异步网络请求。区别于传统web开发中采用的同步方式。
Ajax带来的最大影响就是页面可以无刷新的请求数据。以往,页面表单提交数据,在用户点击完”submit“按钮后,页面会强制刷新一下,体验十分不友好。
fetch代表着更先进的技术方向,但是目前兼容性不是很好,在项目中使用的时候得慎重。
实现一个Ajax 请求
var request = new XMLHttpRequest() ; //创建XMLHttpRequest()
request.onreadystatcechange = function () {
if ( request.readyState === 4) { // 状态发生变化时,函数被回调
if (request.status === 200) {
return success(request.responseText); // 成功,通过responseText拿到响应的文本:
} else { //失败,更具响应码判断失败原因:
return fail(request.status);
}
} else {
//HTTP请求还在继续...
}
}
request.open('GET', '/api/categories');
request.setRequestHeader("Content-Type", "application/json") //设置请求头
request.send(); //到这一步,请求才正式发出
使用原生的js还是比较繁琐,实际工程中建议使用jQuery之类的库,封装的ajax请求方法非常好用,且解决了浏览器兼容性的问题。
$.ajax({
type: 'POST',
url: url,
data: data,
dataType: dataType,
success: function () {},
error: function () {}
}
优缺点
本身是针对MVC的编程,不符合现在前端MVVM的浪潮
基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,有以下特点:
postData () {
let params = new URLSearchParams() //用来接收参数
params.append( 'a', 2);
params.append( 'b', 1);
axios( {
url: 'http://localhost/post',
method: 'post',
headers: {
'Content-Type': "application/x-www-form-urlencoded"
},
data: params
})
.then( res => console.log( res ))
.then( error => console.log( error ))
}
优缺点
设计简洁,API简单,支持浏览器和node,
从 node.js 创建 http 请求
支持 Promise API
客户端支持防止CSRF
提供了一些并发请求的接口(重要,方便了很多的操作)
PS:防止CSRF:就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。
fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。但是,一定记住fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象。
使用fetch获取数据的例子
//fetch get请求
getData () {
fetch('./data/data.josn')
.then( res => res.json() ) //对数据进行格式化
.then( data => console.log( data ) ) //格式化后的数据
.catch( error => console.log( error ))
}
//fetch post请求
fetch( 'http://localhost/post.php',{
method: POST,
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded' //指定提交方式为表单提交
}),
body: new URLSearchParams([["a",1],["b",2]]).toString() //携带参数
})
.then( res = res.text() )
.then( data => console.log( data ));
}
在使用fetch的时候需要注意:
原文 https://www.toutiao.com/a6658039407179727374/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1552952814&app=news_article&utm_source=weixin&utm_medium=toutiao_ios&group_id=6658039407179727374
https://blog.csdn.net/qq_36803558/article/details/81237753
.