私はいくつかの大規模なクエリ用のスクリプトを作成しており、php 側でのタイムアウトを回避するために、さらにユーザーに入力を与えるために、そのほとんどを jquery で作成しようとしています。
したがって、次のように機能します。最初に、ユーザーは select で 1 つのレコードを選択します。彼がボタンをクリックすると、json 形式のレコードから必要な詳細を取得するための ajax 呼び出しが行われました。
応答により、最初の呼び出しの結果ごとに ajax 呼び出しを行うループが発生しました。
async を false に設定すると機能しますが、いくつかの ajax 呼び出しがあるため、ブラウザーがフリーズします。非同期をオフにしてUIを更新する方法はありますか?
つまり、ループ内で ajax 呼び出しを行っているときに async をオフに設定する必要があるという事実は、私には意味がありません。同時に複数の呼び出しを行うことができますが、それで問題ありませんが、async を false に設定しない限り、そのループ内で現在のインデックスを取得できないのはなぜですか? 最初のインデックスを使用し続けます。
$("#button_copy").live('click', function(){
$('#button_copy').attr("disabled", true);
id = $('#select').val();
$.ajax({
type: "POST",
url: "query1.php",
dataType: 'json',
async:false,
cache: false,
data: 'id=' + id,
success: function( data ) {
var total1 = data['records'].length;
$("#console").append('Total query 1: ' + total1 + '<br />');
for (var i in data['records']) {
$.ajax({
type: "POST",
url: "query2.php",
dataType: 'json',
async:false,
cache: false,
data: 'id=' + data['records'][i].id,
success: function( data2 ) {
var total2 = data2['records2'].length;
$("#console").append('Total of query 2 from ' + data['records'][i].person + ': ' + total2 + '<br />');
},
error: function(data2) {
console.log(data2);
}
});
var percentprogress1 = (i / total1) * 10000;
$('#progressbar1').css('width',percentprogress1 + '%');
}
},
error: function(data) {
console.log(data);
}
});
});