前端需要掌握ajax吗,前端开发需要了解的异步请求方式

异步请求

背景:

异步请求,为了优化用户体验,而诞生。

ajax

var xmlhttp;

if (window.XMLHttpRequest)

{// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

}else {// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function(){

if (xmlhttp.readyState==4 && xmlhttp.status==200)

{

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","test1.txt",true);

xmlhttp.send();

界面用户体验改善,局部刷新

每次都需要重复写XMLHttpRequest相关代码

calback

function sum(a,b,cb){

const sum = a+b;

if(cb && typeof cb === 'function'){

cb(sum)

}

}

sum(1,2,function(parm){

console.log(parm);

})

依赖于之前业务逻辑,并非真正的异步,

var request = $.ajax({

url: "script.php",

method: "POST",

data: { id : menuId },

dataType: "html"

});

request.done(function( msg ) {

$( "#log" ).html( msg );

});

request.fail(function( jqXHR, textStatus ) {

alert( "Request failed: " + textStatus );

});

进行了封装,减少了XMLHttpRequest相关代码

fetch

fetch("http://xxxx").then(res => {

console.log("fecth res....");

}).catch(error => {

console.log("fetch error");

})

promise

new Promise().then(res => {

console.log("promise res....");

}).catch(error => {

console.log("promise error");

})

代码返回结果处理,拉平,编写上体验更好,

axios 增强版promise

axios.get('/user', {

params: {

ID: 12345

}

})

.then(function (response) {

console.log(response);

})

.catch(function (error) {

console.log(error);

});

//同时发出多个请求

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) {

// 两个请求现在都执行完成

}));

es6 async/await

async function getUserName(){

const userName = await queryUserName();

return userName;

}

e6 yield

const getUser = function* getUserName(){

yield "zhangsan";

yield "xiaoming"

}

多个请求之间,把异步代码修改为同步,等待

Rxjs

const foo = new Observable(subscriber => {

console.log('Hello');

subscriber.next(42);

});

foo.subscribe(x => {

console.log(x);

});

参考文献

Rxjs

本文作者:前端首席体验师(CheongHu)

版权声明: 本文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值