用原生JS封装类jQuery的ajax方法
前言:为了深入理解jQuery中的ajax方法,本文通过使用原生JavaScript来封装一个类似的方法,能实现最基本的功能。其中会使用带promise方法。
1、ajax 的 基本功能
首先:
request = new XMLHttpRequest()
- JS 可以设置任意请求 header :
- 第一部分
request.open('get', '/xxx')
- 第二部分
request.setRequestHeader('content-type','x-www-form-urlencoded')
- 第四部分
request.send('a=1&b=2')
- 第一部分
- JS 可以获取任意响应 header 吗
- 第一部分
response.status
/request.statusText
- 第二部分
response.getResponseHeader()
/request.getAllResponseHeaders()
- 第四部分
response.responseText
- 第一部分
2、初始版本
封装:
|
|
调用:
|
|
3、使用ES6新语法优化
- 上面的代码中,好几行的
let
赋值看起来很傻,所以可以使用ES6的新语法:解构赋值来进行优化。 - 首先简单的介绍一下ES6新语法之解构赋值,MDN文档 。 解构赋值语法是一个 Javascript 表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。举例说明:
|
|
- 更改后的代码:
|
|
4、使用promise优化
-
这里使用
promise
优化,主要解决的问题是:因为每个程序员的回调名不一样,你不看文档根本不知道这个库的函数名是什么,所以我们可以使用该方法不设置successFn
、failFn
这两个函数的函数名。 -
优化后代码如下: 封装:
|
|
调用:
|
|
5、真正的jQuery的ajax方法
jQuery.ajax()
方法中,和我上面自己实现的有些许的名称差异:
- successFn ==>
success
- failFn ==>
error
- headers中设置响应头的Content-Type属性 ==>
dataType
- data ==>
body
- jQuery也支持promise写法(成功第一个参数,失败第二个参数)
- 等等
举例说明:
- jQuery普通写法:
|
|
- jQuery
promise
写法:
|
|
- 原文作者:Enoch Qin
- 原文链接:https://dreamqyq.github.io/post/HTTP/jquery-ajax-encapsulated-with-native-js/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。