我在阅读有关此主题的所有其他问题时感到困惑,但似乎无法为我的代码找到最佳选择。基本上我有一个执行异步 ajax 函数的.each
迭代器。我需要在不锁定浏览器的情况下同步,所以我选择不使用async: false
。
代码如下:
$(".btn-timbrar").each(function(i, obj){
$.ajax({
type: 'POST',
url: "Home?opt=Recibo_G",
data: {id: $(obj).data("id"), p: pago},
success: function(response){
progress = progress + interval;
$barra.find("#progreso-global").width(progress);
$barra.find("#progreso-global").html(progress+"%");
if(response.indexOf("timbrado con exito") != -1){
$(obj).parent().html('<a title="PDF" class="btn btn-recibo-info btn-mini" target="_blank" href="/ReciboVital/Home?opt=PDF&id='+$(obj).data("id")+'"><span class="glyphicon glyphicon-file"></span> PDF</a> <a title="XML" class="btn btn-recibo-info btn-mini" target="_blank" href="/ReciboVital/Home?opt=XML&id='+$(obj).data("id")+'"><span class="glyphicon glyphicon-download-alt"></span> XML</a> <a title="Enviar Correo" class="btn btn-recibo-info btn-mini btn-correo" href="/ReciboVital/Home?opt=Correo&='+$(obj).data("id")+'"><span class="glyphicon glyphicon-envelope"></span></a> <a title="Cancelar" class="btn btn-recibo-info btn-mini btn-correo" href="/ReciboVital/Home?opt=Cancelar&id='+$(obj).data("id")+'"><span class="glyphicon glyphicon-remove"></span></a>');
$("#example thead th:eq(5)").width(150);
}
}
});
});
不使用async: false
的唯一方法是求助于回调而不是.each()
循环。例如:
var buttons = $(".btn-timbrar");
(function nextButton() {
var obj = [].pop.call(buttons);
$.ajax({
type: 'POST',
url: "Home?opt=Recibo_G",
data: {id: $(obj).data("id"), p: pago},
success: function(response){
progress = progress + interval;
$barra.find("#progreso-global").width(progress);
$barra.find("#progreso-global").html(progress+"%");
if(response.indexOf("timbrado con exito") != -1){
$(obj).parent().html('<a title="PDF" class="btn btn-recibo-info btn-mini" target="_blank" href="/ReciboVital/Home?opt=PDF&id='+$(obj).data("id")+'"><span class="glyphicon glyphicon-file"></span> PDF</a> <a title="XML" class="btn btn-recibo-info btn-mini" target="_blank" href="/ReciboVital/Home?opt=XML&id='+$(obj).data("id")+'"><span class="glyphicon glyphicon-download-alt"></span> XML</a> <a title="Enviar Correo" class="btn btn-recibo-info btn-mini btn-correo" href="/ReciboVital/Home?opt=Correo&='+$(obj).data("id")+'"><span class="glyphicon glyphicon-envelope"></span></a> <a title="Cancelar" class="btn btn-recibo-info btn-mini btn-correo" href="/ReciboVital/Home?opt=Cancelar&id='+$(obj).data("id")+'"><span class="glyphicon glyphicon-remove"></span></a>');
$("#example thead th:eq(5)").width(150);
}
if(buttons.length > 0) {
nextButton();
}
}
});
})();