传统Ajax是XMLHttpRequest(XHR),核心是使用XHR对象,但是多个请求之间如果有先后关系的话,会出现回调地狱。JQuery ajax 是对原生XHR的封装,除此以外还增添了对JSONP的支持
缺点:
fetch是基于promise设计的。fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。但是,一定记住fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象。
fetch是比较底层的API,很多情况下都需要我们再次封装。
// fetch
fetch(url, {
method: 'POST',
body: Object.keys({name: 'test'}).map((key) => {
return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
}).join('&')
})
优缺点:
Vue2.0之后,尤雨溪推荐大家用axios替换JQuery ajax.
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范
可以在node.js中使用,
axios({
method: 'GET',
url: url,
})
.then(res => {console.log(res)})
.catch(err => {console.log(err)})
并发请求
function getUserAccount() {
return axios.get('/user/12345');
}
function getUserPermissions() {
return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) {
// Both requests are now complete
}));
以上是官方的案例
axios体积比较小,封装的也很好,也没有fetch和ajax的问题
防止CSRF:就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略
以上内容整理于互联网