Ajaxでcgiを呼び出し、DBを検索して結果を返していました。
var request = $.ajax({type: 'GET',datatype:"text", data:{idnum:wkkey}, url: "select.cgi", async: true }) request.done(function(reqdata) { /* Ajaxの結果処理 */ }
これで動作していましたが
この処理をループして複数回実行する必要が生じました。
wkKeyArry に [111,222]と入っている状況で以下のように書き換えました。
for (cntID = 0;cntID < wkKeyArry.length;cntID++){ wkkey = wkKeyArry[cntID] /* ここで上記の処理 */ var request = $.ajax({type: 'GET',datatype:"text", data:{idnum:wkkey}, url: "select.cgi", async: true }) } request.done(function(reqdata) { /* Ajaxの結果処理 */ }
しかし非同期処理では、ループの順番や結果が正しく処理されません。
async: falseと同期処理にしてしまうと、ブラウザから非推奨と
言われます。
この場合、ループの中でAjaxの通信を待たせることは不可能なのでしょうか。
別の処理を待たせるのであれば、success:に書く方法や$.whenを使う方法が
あるようですが、
同じ処理を繰り返したい場合は、どのように待たせればよいのでしょうか。
Ajaxで呼ばれる側に、ループの機能を持たせる方法も考えていますが、
呼び出し側にループを追加する方が修正量が少ないので、
できればjavascript側で対応したいと考えています。
補足します
Ajaxでの呼び出しは1つだけです。例として処理A,処理B,処理Cの順序を
制御するのであれば、ネット上で情報がありました。
同じ処理を繰り返す必要が生じました。
2回以上で想定できる回数は、現状は6回ですが、上限は規定できません。
一番簡単な方法は非同期を同期にするだけです。
ただこの方法をとるとブラウザに非推奨の警告メッセージが表示されるので
回避策をお聞きしました

回答1件
あなたの回答
tips
プレビュー