ajax回调函数ifelse,实现AJAX及用Promise解决回调函数命名问题

html代码:

js代码:

window.jQuery=function(){}

window.jQuery.ajax = function({method, url, body, headers, successFn, failFn}){ //ES6的解构赋值

let request = new XMLHttpRequest()

request.open(method, url)

request.onreadystatechange = function(){

if(request.readyState === 4){

if(request.status >=200 && request.status <300){

successFn.call(undefined, request.responseText)

}else if(request.status >= 400){

failFn.call(undefined, request)

}

}

}

request.send(body)

}

myButton.addEventListener('click',function(){

window.jQuery.ajax({

method: 'POST',

url: '/xxx',

body: 'a=1&&b=2',

headers: {

'content-type': 'x-www-form-urlencoded',

'frank': '18'

},

successFn:(responseText)=>{console.log("success")},

failFn:(request)=>{console.log("fail")}

})

})

使用上面这种方式有一个问题,成功和失败都有一个函数,这个函数名每次都需要另取,不规范。我们采用Promise就可以解决这个问题。

window.jQuery=function(){}

window.jQuery.ajax = function({method, url, body, headers, successFn, failFn}){

return new Promise(function(resolve, reject){

let request = new XMLHttpRequest()

request.open(method, url)

request.onreadystatechange = function(){

if(request.readyState === 4){

if(request.status >=200 && request.status <300){

resolve.call(undefined, request.responseText)

}else if(request.status >= 400){

reject.call(undefined, request)

}

}

}

request.send(body)

})

}

myButton.addEventListener('click',function(){

window.jQuery.ajax({

method: 'POST',

url: '/xxx',

body: 'a=1&&b=2',

headers: {

'content-type': 'x-www-form-urlencoded',

'frank': '18'

}

}).then(

(responseText)=>{console.log("success")},

(request)=>{console.log("fail")}

)

})

这样如果成功或者失败后有多个函数需要执行,可以继续.then()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值