我有以下代码,它应该打开一个带有进度条的模式对话框。随着 ajax 调用在后台运行,进度条应该会前进。问题是,直到 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/
谢谢!