Skip to content

Commit 12ca487

Browse files
committed
jq-Deferred
1 parent fdce65d commit 12ca487

File tree

2 files changed

+123
-130
lines changed

2 files changed

+123
-130
lines changed

README.md

-130
Original file line numberDiff line numberDiff line change
@@ -114,136 +114,6 @@ ISO 移动端 input 无法输入文本
114114
请勿包含这个属性,
115115

116116

117-
118-
/////////////////////////////////////////////////////////////
119-
120-
关于jq 中的 $.when 与及 Deferred 对象的一些有趣研究
121-
122-
/////////////////////////////////////////////////////////////
123-
124-
```javascript
125-
var _tools = {
126-
ajax:function(data){
127-
var $d = $.Deferred();
128-
$.ajax({
129-
type: data.type,
130-
url: data.url,
131-
data: data.data,
132-
cache: data.cache,
133-
dataType: data.dataType,
134-
beforeSend:data.beforeSend
135-
}).done(function(data){
136-
$d.resolve(data);
137-
}).fail(function(){
138-
console.log('//////////////fail/////////////');
139-
$d.reject('fail');
140-
});
141-
142-
return $d.promise();
143-
},
144-
ajax2:function(data){
145-
var deferred = $.Deferred();
146-
$.ajax({
147-
type: data.type,
148-
url: data.url,
149-
data: data.data,
150-
cache: data.cache,
151-
dataType: data.dataType,
152-
beforeSend:data.beforeSend
153-
}).done(function(response){
154-
var r = String(response);
155-
deferred.resolve(response);
156-
//$d.resolve(data);
157-
}).fail(function(){
158-
console.log('//////////////fail2/////////////');
159-
deferred.reject('fail');
160-
});
161-
162-
163-
return $.when(deferred.promise());
164-
}
165-
166-
}
167-
168-
169-
方式1: 需要$.when 开头 (单个 Deferred 可以不用 $.when 来执行)
170-
171-
$.when(_tools.ajax({
172-
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
173-
type:"GET",
174-
cache:false,
175-
data:{time:new Date().getTime()},
176-
dataType:"jsonp"
177-
})).then(function(data){
178-
var login_name_tmp = data.login_name_tmp;//用户名
179-
console.log('检查登录2',login_name_tmp);
180-
if(login_name_tmp){
181-
$('.regLogTab0').hide();//隐藏登陆
182-
$('.username').html(login_name_tmp);//用户名赋值
183-
$('#username').html(login_name_tmp);//用户名赋值
184-
$('.regLogTab1').show();//显示用户名
185-
}
186-
})
187-
188-
方式1-2:
189-
_tools.ajax({
190-
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
191-
type:"GET",
192-
cache:false,
193-
data:{time:new Date().getTime()},
194-
dataType:"jsonp"
195-
}).then(function(data){
196-
var login_name_tmp = data.login_name_tmp;//用户名
197-
console.log('检查登录2',login_name_tmp);
198-
if(login_name_tmp){
199-
$('.regLogTab0').hide();//隐藏登陆
200-
$('.username').html(login_name_tmp);//用户名赋值
201-
$('#username').html(login_name_tmp);//用户名赋值
202-
$('.regLogTab1').show();//显示用户名
203-
}
204-
})
205-
206-
//方式2: 忽略 $when 开头,直接定义在 Deferred 封装的函数里面
207-
_tools.ajax2({
208-
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
209-
type:"GET",
210-
cache:false,
211-
data:{time:new Date().getTime()},
212-
dataType:"jsonp"
213-
}).then(function(data){
214-
215-
console.log('检查登录3',data);
216-
217-
return _tools.ajax2({
218-
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
219-
type:"GET",
220-
cache:false,
221-
data:{time:new Date().getTime()},
222-
dataType:"jsonp"
223-
})
224-
}).then(function(data){
225-
console.log('检查登录2',data);
226-
})
227-
228-
```
229-
/////////////////////////////////////////////////////////////
230-
231-
单个 Deferred 可以不用 $.when 来执行
232-
233-
代码中,可以 直接 是用 $.when 来执行 Deferred 定义的异步 --> 需要是用 $.when 来调用 Deferred 定义的异步,之后可以在 then 中返回 Deferred定义的函数 ,看起来要 $.when 带头
234-
也可以 在定义 Deferred 的时候 把返回 $.when 的执行 --> 就会 开始调用 Deferred 的函数 不用是用$.when ,看起来比较正常点,但感觉在定义在 Deferred 里面有点多余
235-
到底2种写法哪里更好?个人不的而知,不过我还是建议使用第一种
236-
237-
建议:在同时执行多个 Deferred 或者 队列 Deferred 才使用 $.when
238-
相关问题:http://stackoverflow.com/questions/5627284/pass-in-an-array-of-deferreds-to-when/5627301#5627301
239-
demo: http://jsfiddle.net/YNGcm/21/
240-
241-
$.when.apply($, my_array);
242-
$.when.apply(null , my_array);
243-
第一个参数 $ , null 的区别? 2个都可以执行,好像没看出有什么区别
244-
/////////////////////////////////////////////////////////////
245-
246-
247117
动画秘诀 本人做的笔记,不明白自己看手册吧。
248118
一个视点(perspective)、两种模式(2D,3D)、三条轴线(X,Y,Z)、四种变化(旋转、移动 、缩放、扭曲)
249119
perspective

mark-jq-Deferred.md

+123
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#### 关于jq 中的 $.when 与及 Deferred 对象的一些有趣研究
2+
3+
```javascript
4+
var _tools = {
5+
ajax:function(data){
6+
var $d = $.Deferred();
7+
$.ajax({
8+
type: data.type,
9+
url: data.url,
10+
data: data.data,
11+
cache: data.cache,
12+
dataType: data.dataType,
13+
beforeSend:data.beforeSend
14+
}).done(function(data){
15+
$d.resolve(data);
16+
}).fail(function(){
17+
console.log('//////////////fail/////////////');
18+
$d.reject('fail');
19+
});
20+
21+
return $d.promise();
22+
},
23+
ajax2:function(data){
24+
var deferred = $.Deferred();
25+
$.ajax({
26+
type: data.type,
27+
url: data.url,
28+
data: data.data,
29+
cache: data.cache,
30+
dataType: data.dataType,
31+
beforeSend:data.beforeSend
32+
}).done(function(response){
33+
var r = String(response);
34+
deferred.resolve(response);
35+
//$d.resolve(data);
36+
}).fail(function(){
37+
console.log('//////////////fail2/////////////');
38+
deferred.reject('fail');
39+
});
40+
41+
42+
return $.when(deferred.promise());
43+
}
44+
45+
}
46+
47+
48+
方式1: 需要$.when 开头 (单个 Deferred 可以不用 $.when 来执行)
49+
50+
$.when(_tools.ajax({
51+
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
52+
type:"GET",
53+
cache:false,
54+
data:{time:new Date().getTime()},
55+
dataType:"jsonp"
56+
})).then(function(data){
57+
var login_name_tmp = data.login_name_tmp;//用户名
58+
console.log('检查登录2',login_name_tmp);
59+
if(login_name_tmp){
60+
$('.regLogTab0').hide();//隐藏登陆
61+
$('.username').html(login_name_tmp);//用户名赋值
62+
$('#username').html(login_name_tmp);//用户名赋值
63+
$('.regLogTab1').show();//显示用户名
64+
}
65+
})
66+
67+
方式1-2:
68+
_tools.ajax({
69+
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
70+
type:"GET",
71+
cache:false,
72+
data:{time:new Date().getTime()},
73+
dataType:"jsonp"
74+
}).then(function(data){
75+
var login_name_tmp = data.login_name_tmp;//用户名
76+
console.log('检查登录2',login_name_tmp);
77+
if(login_name_tmp){
78+
$('.regLogTab0').hide();//隐藏登陆
79+
$('.username').html(login_name_tmp);//用户名赋值
80+
$('#username').html(login_name_tmp);//用户名赋值
81+
$('.regLogTab1').show();//显示用户名
82+
}
83+
})
84+
85+
//方式2: 忽略 $when 开头,直接定义在 Deferred 封装的函数里面
86+
_tools.ajax2({
87+
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
88+
type:"GET",
89+
cache:false,
90+
data:{time:new Date().getTime()},
91+
dataType:"jsonp"
92+
}).then(function(data){
93+
94+
console.log('检查登录3',data);
95+
96+
return _tools.ajax2({
97+
url:"http://activity.appgame.com/activity/common/session_login.php",//登陆接口
98+
type:"GET",
99+
cache:false,
100+
data:{time:new Date().getTime()},
101+
dataType:"jsonp"
102+
})
103+
}).then(function(data){
104+
console.log('检查登录2',data);
105+
})
106+
107+
```
108+
109+
`单个 Deferred 可以不用 $.when 来执行`
110+
```js
111+
代码中,可以 直接 是用 $.when 来执行 Deferred 定义的异步 --> 需要是用 $.when 来调用 Deferred 定义的异步,之后可以在 then 中返回 Deferred定义的函数 ,看起来要 $.when 带头
112+
也可以 在定义 Deferred 的时候 把返回 $.when 的执行 --> 就会 开始调用 Deferred 的函数 不用是用$.when ,看起来比较正常点,但感觉在定义在 Deferred 里面有点多余
113+
到底2种写法哪里更好?个人不的而知,不过我还是建议使用第一种
114+
115+
建议:在同时执行多个 Deferred 或者 队列 Deferred 才使用 $.when
116+
相关问题:http://stackoverflow.com/questions/5627284/pass-in-an-array-of-deferreds-to-when/5627301#5627301
117+
demo: http://jsfiddle.net/YNGcm/21/
118+
119+
$.when.apply($, my_array);
120+
$.when.apply(null , my_array);
121+
第一个参数 $ , null 的区别? 2个都可以执行,好像没看出有什么区别
122+
123+
```

0 commit comments

Comments
 (0)