为了一步步地理清封装步骤,我打算逐步封装ajax函数的功能,分成了以下6个版本:
Version 1
function
说明:
- 未兼容低版本 IE
- 这种方法在传参数的时候只能上例所示的格式,无法用json格式;
- 当method为get的时候,参数没正确地加在url后面无法起到作用;
- method为get时也是设置了('Content-Type', 'application/x-www-form-urlencoded')的请求头,但是这是不必要的。
- 把函数的结果写死了,总是console.log(this.responseText)
Version 2
function
说明:
- 实现了IE低版本的兼容并实现了method各自对应的传参方式
- 这种方法在传参数的时候只能上例所示的格式,无法用json格式;
- 把函数的结果写死了,总是console.log(this.responseText)
Version 3
function
说明:
- 弥补了无法使用json传参的缺陷,既能用字符串形式传参也能用json
- 仍然把函数结果写死了
尝试在Ajax中return出数据
Version 4
function
说明:
- 函数有返回值,没有把函数写死
- 但是使用了同步的策略,这是非常不好的
Version 5
// 封装者
说明:
为什么return出来的是undefined?为什么取不出一个正确的return值?因为Ajax是异步的操作,在获取数据完成之前,就已经执行了return res(计划中获取到的数据),所以是无法正确return出我们想要的结果的。
既然取不出一个return值,那么换个思路,使用回调函数让封装者替我们实现我们想要的效果.
使用的是异步策略,在异步的情况下使用回调函数时比较多的。
但是这段代码还是比较凌乱的
Version 6
function
这个是Ajax比较像样的封装函数了。
(完)