J'essaie de créer un utilitaire Web qui prend plusieurs grands ensembles de données et effectue des appels ajax pour les traiter et les indexer dans une table pour la recherche. Fondamentalement, les données seront décomposées en 5 ensembles de données, mais par souci de simplicité, je vais réduire les données de l'échantillon à deux ensembles (essentiellement des tableaux multidimensionnels).Mettre en pause un grand nombre d'appels AJAX, plusieurs jeux de données
- articles en stock
- Systems
Disons, encore une fois pour des raisons de simplicité, que chaque jeu de données 3 éléments qu'il contient.
JAVASCRIPT PARTIE 1
var inventory = [
{"id": "1","title": "0002\/840","type": "inventory"},
{"id": "2","title": "0002\/841","type": "inventory"},
{"id": "3","title": "0002\/842","type": "inventory"}
];
var systems = [
{"id": "28","title": "System 1","type": "system"},
{"id": "54","title": "System 2","type": "system"},
{"id": "76","title": "System 3","type": "system"}
];
La façon dont il devrait fonctionner est que le code frappe le premier élément d'inventaire, fait un appel ajax basé sur elle, attend la réponse, puis se déplace au deuxième article. Il le fait encore et encore jusqu'à ce qu'il atteigne le dernier élément, à quel point, il se déplace vers l'ensemble de données suivant (systèmes), et puis se fraye un chemin à travers ceux-ci.
Maintenant, cela fonctionne très bien. Vous pouvez voir un exemple entièrement fonctionnel sur le lien CodePen ci-dessous. Cette version du code JS a un petit délai intégré pour mieux démontrer le problème.
Il a été demandé que j'ajouter une pause/fonction Réactiver. Je suis un peu perdu sur la façon d'arrêter cela sans geler le navigateur, et plus encore, comment reprendre où je me suis arrêté au bon endroit dans le jeu de données correct.
J'ai essayé d'ajouter une paused
variable booléenne qui est activée et désactivée, puis une boucle dans ma fonction qui serait tout simplement attendre d'être false
la variable paused
. Cela a évidemment bloqué la fenêtre du navigateur. Quelqu'un peut-il nous éclairer sur la façon dont je pourrais être en mesure de faire une pause et de ne pas faire de pause sans flipper le navigateur?
Merci d'avance.
RESTANT JAVASCRIPT PARTIE 2
var paused = false;
function PauseIndexing() {
//paused = true;
}
function BeginIndexing() {
updateItems(inventory, 'inventory', 0, function() {
//This gets called when inventory is done
updateItems(systems, 'systems', 0, function() {
alert("Inventory and Systems Imported");
});
});
}
function updateItems(items, type, x, callback) {
/* This causes complete freeze as expected*/
//while (paused) {}
var item_count = items.length;
$.post('', {
item: items[x],
type: type
}, function() {
x++;
if (x == item_count) {
callback();
} else {
updateItems(items, type, x, callback);
}
});
}
pourquoi diable êtes-vous INONDATIONS votre serveur à la demande ajax lorsque vous pouvez envoyer une seule demande ajax? pour un curseur de chargement? – madalinivascu
@madalinivascu parce que le processus qui est exécuté par le (s) appel (s) ajax bloque réellement mon serveur jusqu'à ce qu'il soit terminé. Je préfère en appeler un, arrêter et laisser les autres processus se terminer, puis appeler le suivant. Ce n'est pas un morceau de code public et utilisé uniquement par notre personnel. – Dutchie432