美文网首页
使用promise封装ajax操作

使用promise封装ajax操作

作者: 马儿_adcf | 来源:发表于2019-04-14 17:28 被阅读0次

原文:https://blog.csdn.net/Little_Pig_Bug/article/details/81079822

Jquery的ajax

在开发中,我们常常会用到ajax,根据请求的地址,服务器返回相应的success或者error,而且ajax也是可以异步的,async为true的时候为异步,反之同步,下面以异步为例,因为我们的Promise就是异步操作。
$.ajax({
cache: true,
type: "GET",
url: "http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1",
dataType: "json",
async: true,
success: function(data) {
callback(data);
},
error: function(data) {
console.info("error: " + data.responseText);
}
});

上面的ajax请求的意思就是,当我异步请求一个url地址时,如果成功则会执行callback,否则打印出错误信息,所以ajax请求 ,不论结果是什么,都只有一种结果,success或者error。这和我们的Promise不谋而合,那我们也可以用Promis去封装我们的ajax。

Promise封装Ajax

我们知道Promise会接收两个参数,resolve(成功)和reject(失败),我们可以用这两个参数代替ajax的success和error,并使用链式调用,then里面执行成功的操作,catch里面执行错误的信息。这里会涉及到http方面的知识,相关参数可以参考这个链接

https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/send
const $ajax = function(url) {
return new Promise((resolve, reject) => {
// 创建 XMLHttpRequest对象,用于在后台与服务器交换数据。
let request = new XMLHttpRequest()
//设置向服务器提交的方式
request.open("GET", url, true)
request.responseType = 'json'
request.setRequestHeader("Accept", "application/json");
// onreadystatechange捕获事件请求的状态
request.onreadystatechange = function handlerRequest() {
//readyState为4的时候,代表请求操作已经完成,这意味着数据传输已经彻底完成或失败。
if (this.readyState === 4) {
//请求成功
if (this.status === 200) {
resolve(this.response)
} else {
reject(new Error(this.statusText));
}
}
}
//发送 HTTP 请求,默认异步请求
request.send();
})
}

$ajax("http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1")
.then((resolve) => {
console.log(resolve)
})
.catch((reject) => {
console.log(reject)
})

上面的js,刚开始我直接在vscode里面运行,发现直接报错 "XMLHttpRequest is not defined",但是我在html引入改该s,就没有报错了,一直不懂为啥@**@

总结:其实我们开发中并不会用到这么麻烦的封装,直接用jquery封装好的ajax的就可以,如果是vue的话,你可以去 看看 vue-resource和axios,发现和Promise何其相似,所以我们开发的过程中,去了解开发的思想是非常的重要。

作者:Little_Pig_Bug
来源:CSDN
原文:https://blog.csdn.net/Little_Pig_Bug/article/details/81079822
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

  • 使用promise封装ajax操作

    原文:https://blog.csdn.net/Little_Pig_Bug/article/details/8...

  • Promise封装_AJAX

    Promise封装_AJAX 调用格式

  • ES6异步请求

    Promise //Promise其实就是ajax的一个封装方式,简化ajax复杂度//Promise-all适合...

  • 封装 jQuery.ajax

    封装一个 jQuery.ajax 升级jQuery.ajax 满足 Promise 规则

  • Promise应用

    1、使用Promise封装Ajax请求 作者:这波能反杀链接:https://www.jianshu.com/p/...

  • 封装AJAX,以及使用promise

    以下是一个封装好的AJAX: AJAX如果要符合promise的写法,就必须return一个new promise...

  • 使用promise封装ajax请求

    封装一个ajax请求方法: 调用ajax方法,发送请求

  • Ajax

    标签: Ajax 正文 一、实现一个原生Ajax 二、Ajax状态 三、将原生的 ajax 封装成 promise

  • fetch

    Fetct fetch:系统基于promise封装的ajax方法 fatch().then().then() 缺点...

  • 异步编程笔记

    环境:chrome 80演习:用Promise async/await封装$.ajax Promise 第一次请求...

网友评论

      本文标题:使用promise封装ajax操作

      本文链接:https://www.haomeiwen.com/subject/greswqtx.html