J'utilise jQuery pour charger une table massive en lots de lignes. Je charge les lignes initiales, puis je fais des appels $ .ajax pour ajouter des lignes au corps de la table. À la fin de l'insertion du prochain bloc de lignes, j'appelle la méthode pour traiter le prochain bloc de lignes. Voir le code ci-dessous. Le problème est, même après tout le contenu est chargé, le javascript prétend encore être en cours d'exécution - quand je vais naviguer vers une autre page se plaint qu'il ya une routine javascript ralentir la page et que je veux l'avorter. À ce stade, il ne devrait pas fonctionner! Cette routine est initialement appelée à partir de la routine $ (function() {...}) (en attente). Des idées sur comment je suis censé empêcher cela de continuer après que tout a fini son travail?Javascript (jQuery) encore en cours d'exécution après tout ce que son travail est terminé
function processNextChunk(c, t, s, p, x) {
var args = "{company_ID:" + c + ",shareholdingType:" + t + ",startIndex:" + s + ",pageSize:" + p + ",stack:'" + x + "'}";
//alert(args);
$.ajax({
type: "POST",
url: "TestStructure6.aspx/GetNextHierarchyPage",
data: args,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
//Append the content to the bottom of the table tag.
//Returning 2 arguments from the result, hence the split (initial
//value is an int, so not a big deal using pipe as a delimiter)
if (msg.d.length > 0) {
var slash = msg.d.indexOf('|');
var r;
if (slash > 0) {
x = msg.d.substr(0, slash);
r = msg.d.substr(slash + 1, msg.d.length - slash);
$('#h > tbody').append(r);
if (r.length > 0) {
var percent = (s + p)/totalRows * 100;
$('#counter').html(parseInt(percent) + '%');
setTimeout('processNextChunk(' + c + ', ' + t + ', ' + (s + p) + ', ' + p + ', "' + x + '")', 0);
//processNextChunk(c, t, s + p, p, x)
}
else {
$('#counter').html('');
}
}
}
return true;
}
});
return true;
}
merci pour le conseil, j'ai maintenant ajouté la déclaration vide. Même lorsque j'ai supprimé la minuterie, j'éprouve le même problème. L'introduction de la minuterie était ma tentative d'empêcher la récursion, ce que je pensais être en train de se produire parce que le processusNextChunk s'appelle lui-même. –
Ajout de la minuterie n'aiderait pas - il s'appelle toujours. Utilisez un débogueur pour parcourir votre code et vérifier s'il se répète pour toujours. – SLaks
Le débogueur affiche le mot "vide" à côté d'une icône de bloc-notes sous le débogueur VS2008 pour chaque exécution de l'appel $ .ajax. Il en montre un pour chaque bloc de lignes demandé, et il arrête de les ajouter lorsqu'il n'y a plus de lignes. Cela implique qu'il ne s'agit pas d'une routine sans fin, mais que je ne suis peut-être pas en train de sortir de ma demande. –