# jquery deferred
jquery 1.5 之前 ajax 的写法
var ajax = $.ajax({
url: 'data.json',
success: function () {
console.log('success')
},
error: function () {
consoole.log('error')
}
})
console.log(ajax) // 返回一个 XHR 对象
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
1.5 之后写法
var ajax = $.ajax('data.json')
ajax.done(function () {
console.log('success')
}).fail(function () {
console.log('error')
}).done(function () {
console.log('success 2')
})
console.log('ajax') // 返回一个 deferred 对象
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 使用 jQuery Deferred
// 一段非常简单的异步操作代码,使用 setTimeout 函数
var wait = function () {
var task = function () {
console.log('执行完成')
}
setTimeout(task, 2000)
}
wait()
// 新增需求:要在执行完成之后进行某些特别复杂的操作,代码可能会很多,而且分好几个步骤
function waitHandle () {
var dtd = $.Deferred() // 创建一个 deferred 对象
var wait = function (dtd) {
var task = function () {
console.log('执行完成')
dtd.resolve() // 表示异步任务已经完成
// dtd.reject() // 表示异步任务失败或出错
}
setTimeout(task, 2000)
return dtd // 要求返回 deferred 对象
}
// 注意这里一定要有返回值
return wait(dtd)
}
var w = waitHandle()
w.then(function () {
console.log('ok 1')
}, function () {
console.log('err 1')
}).then(function () {
console.log('ok 2')
}, function () {
console.log('err 2')
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36