4
我打破了我的頭閱讀關於此主題的所有其他問題,但似乎無法找到我的代碼的最佳選擇。基本上我有一個.each
迭代器,它執行異步ajax函數。我需要這個同步而不鎖定瀏覽器,所以我選擇不使用async: false
。同步。每個與異步.ajax
下面的代碼:
$(".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);
}
}
});
});
爲什麼它需要同步?根據定義,同步操作「鎖定」當前線程,因此不存在非阻塞同步操作。您應該使用jQuery承諾來確保在所有AJAX請求完成後都會執行一些操作 – CodingIntrigue
看起來像是一個XY問題。那麼爲什麼你需要這個同步?爲什麼不設置一個腳本服務器端,它將一次處理所有數據,然後只使用一個ajax調用?成功回調中的「obj」不是你的問題嗎?如果使用任何類型的閉包,例如使用設置爲'obj'的ajax請求的選項上下文,那麼在成功回調中使用'this' –
Q.您是否需要Ajax請求按順序或全部並行運行? –