次のコードがあります。これは、進行状況バーのあるモーダルダイアログを開くことになっています。ajax呼び出しがバックグラウンドで1つ進むと、プログレスバーが進むはずです。問題は、forループが完了するまでダイアログボックスが開かず、すべてのajax呼び出しが完了することです。どういうわけか関数になっていると思います.promose()
が、この場合の実装方法がわかりません。誰かが私を助けることができますか?
jQuery('#div_id')
.button()
.click(function(){
var grid = jQuery('#grid_id');
var sel_ar = grid.jqGrid('getGridParam', 'selarrrow');
var last_id = 0;
//open modal progress bar to display the progress of the emails
jQuery('#dialog').html('<div id="progressbar"></div>');
jQuery('#dialog').dialog({
modal: true
});
jQuery('#dialog').dialog('open');
for (var i = 0;i < sel_ar.length;i++){
var orderid = jQuery('#grid_id').jqGrid('getCell', sel_ar[i], 'order_id');
if (last_id != orderid){
jQuery.ajax({
async: false,
url: "/scripts/ajax/script.php",
type: "post",
data: "orderid="+orderid,
success: function(data){
if (data != "true"){
alert(data);
}
jQuery('#progressbar').progressbar({ value: Math.round((i/sel_ar.length)*100) });
}
});
}
last_id = orderid;
pausecomp(1000);
}
//jQuery('#dialog').dialog('close');
jQuery("#keys_list").trigger("reloadGrid");
jQuery("#purchased_users").trigger("reloadGrid");
});
これpausecomp()
は、特定のミリ秒数だけ一時停止する関数です。forループを完了するのに時間がかかることを確認するためにこれを入れようとしていたので、プログレスバーがカチカチ音をたてるのを見ることができました...残念ながら、プログレスバーがポップアップするのを待つ時間が長くなりましたすべてが完了しました。
私は問題を説明するフィドルを作りました。forループが終了してプログレスバーが更新されるまで待機する方法に注目してください。http://jsfiddle.net/YxGqG/5/
ありがとう!