teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

tyぽ

2018/02/05 08:03

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -46,7 +46,6 @@
46
46
  $.ajax({url:"get.php?sleep=3"}).done(function(data){$("#d1").text(data);d.resolve();}),
47
47
  $.ajax({url:"get.php?sleep=1"}).done(function(data){$("#d2").text(data);d.resolve();}),
48
48
  $.ajax({url:"get.php?sleep=5"}).done(function(data){$("#d3").text(data);d.resolve();})
49
-
50
49
  ).done(function(){
51
50
  $("#end").text("end");
52
51
  });
@@ -60,14 +59,16 @@
60
59
  var d1 = $.Deferred();
61
60
  var d2 = $.Deferred();
62
61
  var d3 = $.Deferred();
62
+ $("#d1").load("get.php?sleep=3",function(){d1.resolve()});
63
+ $("#d2").load("get.php?sleep=1",function(){d2.resolve()});
64
+ $("#d3").load("get.php?sleep=5",function(){d3.resolve()});
63
65
  $.when(
64
- $("#d1").load("get.php?sleep=3",function(){d1.resolve()}),d1.promise(),
65
- $("#d2").load("get.php?sleep=1",function(){d2.resolve()}),d2.promise(),
66
+ d1,d2,d3
66
- $("#d3").load("get.php?sleep=5",function(){d3.resolve()}),d3.promise()
67
67
  ).done(function(){
68
68
  $("#end").text("end");
69
69
  });
70
70
  });
71
+
71
72
  ```
72
73
 
73
74
  ## パターン3(deferredをwhen + promise)
@@ -78,11 +79,10 @@
78
79
  var d1 = $.Deferred();
79
80
  var d2 = $.Deferred();
80
81
  var d3 = $.Deferred();
81
- $("#d1").load("get.php?sleep=3",function(){d1.resolve()});
82
- $("#d2").load("get.php?sleep=1",function(){d2.resolve()});
83
- $("#d3").load("get.php?sleep=5",function(){d3.resolve()});
84
82
  $.when(
83
+ $("#d1").load("get.php?sleep=3",function(){d1.resolve()}),d1.promise(),
85
- d1,d2,d3
84
+ $("#d2").load("get.php?sleep=1",function(){d2.resolve()}),d2.promise(),
85
+ $("#d3").load("get.php?sleep=5",function(){d3.resolve()}),d3.promise()
86
86
  ).done(function(){
87
87
  $("#end").text("end");
88
88
  });

1

参考

2018/02/05 08:03

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -13,4 +13,98 @@
13
13
  });
14
14
  });
15
15
 
16
+ ```
17
+
18
+ # 参考までに
19
+ 以下、sampleで試してみて下さい
20
+ - self.htm
21
+ ```HTML
22
+ <div id="start"></div>
23
+ <div id="d1"></div>
24
+ <div id="d2"></div>
25
+ <div id="d3"></div>
26
+ <div id="end"></div>
27
+ ```
28
+ - get.php
29
+ パラメータsleepで指定した秒数後に、その値を表示する
30
+
31
+ ```PHP
32
+ <?PHP
33
+ $sleep=filter_input(INPUT_GET,"sleep");
34
+ sleep($sleep);
35
+ print $sleep;
36
+ ?>
37
+ ```
38
+
39
+ ## パターン1($.ajax)
40
+
41
+ ```javascript
42
+ $(function(){
43
+ $("#start").text("start");
44
+ var d = $.Deferred();
45
+ $.when(
46
+ $.ajax({url:"get.php?sleep=3"}).done(function(data){$("#d1").text(data);d.resolve();}),
47
+ $.ajax({url:"get.php?sleep=1"}).done(function(data){$("#d2").text(data);d.resolve();}),
48
+ $.ajax({url:"get.php?sleep=5"}).done(function(data){$("#d3").text(data);d.resolve();})
49
+
50
+ ).done(function(){
51
+ $("#end").text("end");
52
+ });
53
+ });
54
+ ```
55
+ ## パターン2(deferredをwhen)
56
+
57
+ ```javascript
58
+ $(function(){
59
+ $("#start").text("start");
60
+ var d1 = $.Deferred();
61
+ var d2 = $.Deferred();
62
+ var d3 = $.Deferred();
63
+ $.when(
64
+ $("#d1").load("get.php?sleep=3",function(){d1.resolve()}),d1.promise(),
65
+ $("#d2").load("get.php?sleep=1",function(){d2.resolve()}),d2.promise(),
66
+ $("#d3").load("get.php?sleep=5",function(){d3.resolve()}),d3.promise()
67
+ ).done(function(){
68
+ $("#end").text("end");
69
+ });
70
+ });
71
+ ```
72
+
73
+ ## パターン3(deferredをwhen + promise)
74
+
75
+ ```javascript
76
+ $(function(){
77
+ $("#start").text("start");
78
+ var d1 = $.Deferred();
79
+ var d2 = $.Deferred();
80
+ var d3 = $.Deferred();
81
+ $("#d1").load("get.php?sleep=3",function(){d1.resolve()});
82
+ $("#d2").load("get.php?sleep=1",function(){d2.resolve()});
83
+ $("#d3").load("get.php?sleep=5",function(){d3.resolve()});
84
+ $.when(
85
+ d1,d2,d3
86
+ ).done(function(){
87
+ $("#end").text("end");
88
+ });
89
+ });
90
+ ```
91
+
92
+ ## パターン4(promiseを利用)
93
+
94
+ ※jQueryの他に、非対応ブラウザ(とくにIE)向けにライブラリを追加
95
+ ```javascript
96
+ <script src="https://www.promisejs.org/polyfills/promise-6.1.0.min.js"></script>
97
+ ```
98
+ その上で
99
+ ```javascript
100
+ $(function(){
101
+ $("#start").text("start");
102
+ Promise.all([
103
+ new Promise(function(resolve){$("#d1").load("get.php?sleep=3",function(){resolve(this);})}),
104
+ new Promise(function(resolve){$("#d2").load("get.php?sleep=1",function(){resolve(this);})}),
105
+ new Promise(function(resolve){$("#d3").load("get.php?sleep=5",function(){resolve(this);})}),
106
+ ]).then(function(){
107
+ $("#end").text("end");
108
+ });
109
+ });
16
110
  ```