質問編集履歴

4

インデント等を調整

2019/11/10 10:37

投稿

kannmuri
kannmuri

スコア42

test CHANGED
File without changes
test CHANGED
@@ -244,7 +244,7 @@
244
244
 
245
245
  【変更➀】
246
246
 
247
- この部分を myFadeOut() と関数化し、26行目の getAjaxData() の場所に書いてみました
247
+ この部分を myFadeOut() と関数化し、getAjaxData() の場所に書いてみました
248
248
 
249
249
  $('section').fadeOut(1000, function(){
250
250
 

3

追記

2019/11/10 10:37

投稿

kannmuri
kannmuri

スコア42

test CHANGED
File without changes
test CHANGED
@@ -58,9 +58,9 @@
58
58
 
59
59
  $('button').click(function(){
60
60
 
61
- const area = $(this).attr('data-area');
61
+ const area = $(this).attr('data-area');
62
-
62
+
63
- Pjax(area);
63
+ Pjax(area);
64
64
 
65
65
  });
66
66
 
@@ -86,9 +86,9 @@
86
86
 
87
87
  $('section').fadeOut(1000, function(){
88
88
 
89
- var html = getHtml(area);
89
+ var html = getHtml(area);
90
-
90
+
91
- $('section').html(html);
91
+ $('section').html(html);
92
92
 
93
93
  });
94
94
 
@@ -144,15 +144,15 @@
144
144
 
145
145
  if( area == 'one' ){
146
146
 
147
- html = `<div data-area="one"></div>`;
147
+ html = `<div data-area="one"></div>`;
148
-
148
+
149
- }
149
+ }
150
150
 
151
151
  else if( area == 'two' ){
152
152
 
153
- html = `<div data-area="two"></div>`;
153
+ html = `<div data-area="two"></div>`;
154
-
154
+
155
- }
155
+ }
156
156
 
157
157
  return html;
158
158
 
@@ -179,3 +179,183 @@
179
179
 
180
180
 
181
181
  どうすればAjaxの処理速度にかかわらず、実現したい順番で処理できるでしょうか。
182
+
183
+
184
+
185
+ ###試したこと(追記)
186
+
187
+ ご回答の中に
188
+
189
+ `$.Deferred().resolve().then(function() {`ではなく
190
+
191
+ `$.when()`を使えとのアドバイスを頂きました。
192
+
193
+
194
+
195
+ その理由として自分なりに推測したのは、
196
+
197
+
198
+
199
+ 3.`<div>`に「Ajaxデータ」を挿入
200
+
201
+ のために待たなければならない処理が
202
+
203
+
204
+
205
+ 1.`<section>`を`fadeOut()`
206
+
207
+ 2.`<section>`に`<div>`を挿入
208
+
209
+ と2つあり、
210
+
211
+
212
+
213
+ そのように複数の処理を待つ場合は`$.Deferred().resolve().then(function() {`では対応できないためだと考えました。
214
+
215
+
216
+
217
+ 以上のように考え、修正したのが次のコードです。【変更➀】と【変更➁】が上の推測に沿った修正になります。
218
+
219
+
220
+
221
+ ```jQeury
222
+
223
+ $('button').click(function(){
224
+
225
+ const area = $(this).attr('data-area');
226
+
227
+ Pjax(area);
228
+
229
+ });
230
+
231
+
232
+
233
+ function Pjax(area){
234
+
235
+
236
+
237
+ // 表示切替
238
+
239
+ $('body').append('<p class="loading">loading</p>');
240
+
241
+
242
+
243
+ /*
244
+
245
+ 【変更➀】
246
+
247
+ この部分を myFadeOut() と関数化し、26行目の getAjaxData() の場所に書いてみました
248
+
249
+ $('section').fadeOut(1000, function(){
250
+
251
+ var html = getHtml(area);
252
+
253
+ $('section').html(html);
254
+
255
+ });
256
+
257
+ */
258
+
259
+
260
+
261
+ /*
262
+
263
+ 【変更➁】
264
+
265
+ 2つの処理完了を待つため $.when().done() に変更しました
266
+
267
+ */
268
+
269
+ $.when(
270
+
271
+ myFadeOut(area,1000), getAjaxData(100)
272
+
273
+ )
274
+
275
+ .done(function(ajaxData) {
276
+
277
+ console.log(ajaxData);
278
+
279
+ $('body').find('.loading').remove();
280
+
281
+ $('section').find('div[data-area="'+area+'"]').html('<p>'+ajaxData+'</p>');
282
+
283
+ $('section').fadeIn(1000, function(){
284
+
285
+ //history.pushState(location.href);
286
+
287
+ });
288
+
289
+ });
290
+
291
+ }
292
+
293
+
294
+
295
+ // 【変更➀】の関数
296
+
297
+ function myFadeOut(area,dalution){
298
+
299
+ const d = new $.Deferred;
300
+
301
+ $('section').fadeOut(dalution, function(){
302
+
303
+ var html = getHtml(area);
304
+
305
+ $('section').html(html);
306
+
307
+ d.resolve();
308
+
309
+ });
310
+
311
+ return d.promise();
312
+
313
+ }
314
+
315
+
316
+
317
+ function getAjaxData(delay){
318
+
319
+ const d = new $.Deferred;
320
+
321
+ setTimeout(function(){ // テストのためAjaxの代わりにsetTimeOut
322
+
323
+ const ajaxData = 'Ajaxデータ';
324
+
325
+ d.resolve(ajaxData);
326
+
327
+ }, delay);
328
+
329
+ return d.promise();
330
+
331
+ }
332
+
333
+
334
+
335
+ function getHtml(area){
336
+
337
+ let html;
338
+
339
+ if( area == 'one' ){
340
+
341
+ html = `<div data-area="one"></div>`;
342
+
343
+ }
344
+
345
+ else if( area == 'two' ){
346
+
347
+ html = `<div data-area="two"></div>`;
348
+
349
+ }
350
+
351
+ return html;
352
+
353
+ }
354
+
355
+ ```
356
+
357
+ ですが、、これでもできず、再び限界になりここに追記させて頂きました。
358
+
359
+
360
+
361
+ 解決できる方がいらっしゃいましたらご回答頂けましたら幸いです。

2

タイトル訂正

2019/11/10 10:34

投稿

kannmuri
kannmuri

スコア42

test CHANGED
@@ -1 +1 @@
1
- Ajaxコールバックでタイミングが整合できず…
1
+ Ajaxでタイミングが整合できず…
test CHANGED
File without changes

1

リンク訂正

2019/11/08 11:52

投稿

kannmuri
kannmuri

スコア42

test CHANGED
File without changes
test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- ???? [https://jsfiddle.net/8wzrs5km/](https://jsfiddle.net/8wzrs5km/)
37
+ ???? [https://jsfiddle.net/v8pmcsak/](https://jsfiddle.net/v8pmcsak/)
38
38
 
39
39
  ```HTML
40
40