を削除する必要がありますasync: false
。これにより、リクエストが完了し、終了時に追加されます。ただし、それらが順不同で追加されていることに気付くでしょう。これを修正するには、promise オブジェクトと .then を使用できます。
images = 10;
var req = $.ajax({
type: "POST",
url: "processimage.php",
data: {
image: images
},
success: function (data) {
$("#logger").append(data + '<br />');
}
});
images--;
while (images > 0) {
req.then(function(){
return $.ajax({
type: "POST",
url: "processimage.php",
data: {
image: 1
},
success: function (data) {
$("#logger").append(data + '<br />');
}
});
});
images--;
}
さて、考えられる問題がもう 1 つあります。images
リクエストごとに の現在の値を渡す必要がある場合、前のコードは の最後の値を持つ最初のリクエストの後にすべてのリクエストを送信しますimages
。それを修正するには、 iffe を使用できます。
images = 10;
var req = $.ajax({
type: "POST",
url: "processimage.php",
data: {
image: 1
},
success: function (data) {
$("#logger").append(data + '<br />');
}
});
images--;
while (images > 0) {
(function(i){
req.then(function(){
return $.ajax({
type: "POST",
url: "processimage.php",
data: {
image: i
},
success: function (data) {
$("#logger").append(data + '<br />');
}
});
});
})(images);
images--;
}
次に、オプションを別の変数に保存することで、以下に示すように DRYer にすることができます。
images = 10;
var ajaxOpts = {
type: "POST",
url: "processimage.php",
data: {
image: 1
},
success: function (data) {
$("#logger").append(data + '<br />');
}
};
var req = $.ajax(ajaxOpts);
images--;
while (images > 0) {
(function(i){
req.then(function(){
ajaxOpts.data.image = i;
return $.ajax(ajaxOpts);
});
})(images);
images--;
}