J'ai un problème pour faire des retards entre les requêtes ajax en boucle. Je veux que le script attende 7 secondes pour faire le suivant. Les demandes ne sont pas identiques, et je ne sais pas combien d'entre elles peuvent l'être. Retarder jQuery Ajax dans la boucle For
$(document).ready(function() {
var announce = $("#announce").data('id');
var lots_cnt = parseInt($("#announce").data('lotscnt'));
for (var i = 0; i < Math.ceil(lots_cnt/20); i++) {
$.ajax({
method: "GET",
url: "/project/lots/"+announce+"/"+(i+1),
async: false,
beforeSend: function() {
$("#console").append("<strong>Parsing lots from page "+(i+1)+"...</strong><br/>");
},
complete:function(){
},
success: function (m) {
$("#console").append(m);
addprogressstep();
setTimeout(function() { $("#console").append("Waiting 7 sec ...<br/>"); }, 7000);
},
error:function(jqXHR, textStatus, errorThrown){
}
});
};
});
['setTimeout()'] (https://developer.mozilla.org/ro/docs/Web/API/window.setTimeout). Cela dit, envoyer autant de requêtes AJAX n'est pas une bonne idée si cela peut être évité. Je suggère de regarder dans l'envoi de toutes les données dans une seule demande, si possible. Cependant, vous devriez *** supprimer définitivement 'async: false' car c'est une pratique horrible - si vous vérifiez la console, vous verrez même le navigateur vous dire de ne pas l'utiliser. –
Ce n'est pas beaucoup de demandes comme il ressemble, c'est entre 1 à 6, donc je pense que les navigateurs et le réseau sont bons avec ça. Malheureusement, je ne peux pas faire une requête à la place de cette boucle, et j'ai besoin de ce délai pour éviter l'erreur "429 Too Many Requests". –
Les navigateurs ne posent pas de problème, mais votre serveur/société d'hébergement peut ne pas l'être si vous avez envoyé N N * utilisateurs par minute au serveur. –