###実現したいこと
ajaxで●を取得して、以下の順番でコンソールに出したいです。
「最初の処理」
↓
「appleの色は●です」
「pineの色は●です」
↓
「最後の処理」
###発生している問題
だいたいの処理は下記「試したこと」のようにできました。ですが、
return ajax_action('apple');
だけなら下記で動くのですが、さらに
return ajax_action('pine');
と2つセットで書くと動かなくなってしまうんです。
###試したこと
下記がそのコードで、★の印のコメントアウトしてあるところが問題の箇所です。
ボタンクリックでフルーツを指定し、ajaxでその色を取得してからコンソールにメッセージを出し、その後にクリックイベントに戻って「最後の処理」を実行したい。という考えになります。
しかし★印の箇所のように2つ続けて書くと動かないという状況です。
jquery
1// クリックしたらコンソールに順に表示する 2$(function(){ 3 $('button').click(function(){ 4 $.Deferred().resolve() 5 .then(function(){ 6 console.log('最初の処理'); 7 }) 8 .then(function() { 9 // ★ここで指定したフルーツの色をajaxで取得し、その色を使ってコンソールにメッセ―ジを出したいのに、次のように2つ並べるとできなくなってしまう 10 return ajax_action('apple'); 11 return ajax_action('pine'); 12 }) 13 .then(function() { 14 // 上でフルーツについてのメッセージが出てから最後の処理を出したい 15 console.log('最後の処理'); 16 }); 17 }); 18}); 19 20// フルーツの色を取得する 21function ajax_action(fruits){ 22 var d=$.Deferred(); 23 $.ajax({ 24 url: url, 25 type: 'POST', 26 data: { 27 fruits: fruits, 28 } 29 }) 30 .done(function(color) { 31 return $.when( insert_action(fruits,color) ).then(function(){ 32 d.resolve(); 33 }); 34 }) 35 .fail(function() { 36 alert('error'); 37 }); 38} 39 40// コンソールにメッセージを出す 41function insert_action(fruits,color){ 42 var d=$.Deferred(); 43 console.log(fruits+' の色は '+color+ 'です'); 44 d.resolve(); 45 return d.promise(); 46}
実現したいことのために、おかしいところ、直すべきところを教えて頂きたいです。宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/14 07:24
2019/06/14 07:27
2019/06/14 07:29
2019/06/14 07:37