質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

2回答

1128閲覧

whenで複数の非同期処理を動かしている中、1つのajaxで失敗したものに対してリクエストする値を変えて再度通信を行いたい場合どうすればいいのでしょうか

bravo

総合スコア14

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/11/21 11:00

編集2019/11/21 11:02

タイトルの通りです。

Javascript

1var A=0 2$.when( 3testajax() 4 5).then(function(data){ 6 7}) 8var testajax=function(){ 9var def = $.Deferred(); 10 $.when( 11 funcA(A), 12 funcB(), 13 funcC() 14 ).done(function (a,b,c) { 15 var data=[a,b,c] 16 def.resolve(data); 17 }) 18 return def.promise(); 19} 20 21var funcA=function(num){ 22var def = $.Deferred(); 23 var url = "http://" + num + ".jp" 24 $.ajax({ // json読み込み開始 25 type: 'GET', 26 url: url, 27 }) 28 .then( 29 function (data) { 30 def.resolve(data); 31 }, 32 function (a, b, c) { 33 34 } 35 ); 36 return def.promise(); 37};

例えば上記のような場合、funcB,funCの通信は特に問題ないとして、funcAの通信が失敗した場合にURLに使用する数字Aを一つづつあげて再度通信を行い、成功した場合に最初のwhenに返すというようなことがしたい場合、どのようにするのがよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/11/21 13:12

自動で再実行ってなると再帰回数の制限に引っかかりそうなもんですけど。 通常は1個失敗したら全部落とします。
guest

回答2

0

流れ的にはこうでしょうか?
funcAの呼び先はドメインの書き換えは現実的ではないので
パラメータを変更することで処理します

※チェック用サイト

  • check.php

パラメータvをみてvが5未満のときには404エラーを返す
そうでない場合はパラメータvを返す

PHP

1<?PHP 2$v=filter_input(INPUT_GET,"v"); 3if($v<5){ 4 header('HTTP/1.1 404 Not Found'); 5 exit(); 6} 7print $v;

上記に対して以下js
再処理の上限をmax_aで指定します。

javascript

1<script> 2var A=0; 3var max_a=10; 4$.when( 5 funcA(A), 6 funcB(), 7 funcC() 8 ).done(function (a,b,c) { 9 var data=[a,b,c]; 10 console.log(data); 11 console.log("END"); 12 }).fail(function () { 13 console.log("err"); 14 }); 15function funcA(num){ 16 var def = $.Deferred(); 17 $.ajax({ 18 url:"check.php", 19 data:{v:A}, 20 }).done(function(data){ 21 def.resolve(data); 22 }).fail(function(xhr,err){ 23 A++; 24 if(A>max_a) def.resolve("over"); 25 funcA(A).done(function(data){ 26 def.resolve(data); 27 }); 28 }); 29 return def.promise(); 30}; 31function funcB(){ 32 var def = $.Deferred(); 33 def.resolve("BBB"); 34 return def.promise(); 35}; 36function funcC(){ 37 var def = $.Deferred(); 38 def.resolve("CCC"); 39 return def.promise(); 40}; 41</script>
  • max_aに5以上を指定すると「5」が返ります
  • max_a=5未満を指定すると「over」が返ります

投稿2019/11/22 01:53

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

javascript

1var funcA = function(num) { 2 var def = $.Deferred(); 3 var f = function() { 4 var url = "http://" + num + ".jp" 5 $.ajax({ 6 type: 'GET', 7 url: url, 8 }).then( 9 function (data) { 10 def.resolve(data); 11 }, 12 function (a, b, c) { 13 num++; 14 f(); 15 } 16 ); 17 }; 18 f(); 19 return def.promise(); 20};

こんな感じでしょうか。
動作確認はしてないので、バグがあるかもしれませんが。

投稿2019/11/21 23:33

2KOH

総合スコア999

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問