Un problème, une question ?

Lancer un fil!
1

Proprification d'une fonction Jquery avec setInterval

Anon258976
Profil Censuré
le 22-05-2016 à 17:54 #
Bonjour,

j'aimerais simplement rendre plus propre le script suivant, qui est actuellement fonctionnel :




setTimeout(function() {
var calcul = $('.stattotale').data("total");
var calculcomp = $('.stattotalecompare').data("total");
var totalduo = calcul+calculcomp;
var pkmnconsult = Math.round(calcul/totalduo*128);
var pkmncompar = Math.round(calculcomp/totalduo*128);
$('#mercurepourcent').css('width', pkmnconsult+'px');
$('#mercurepourcentcomp').css({
'width': pkmncompar+'px',
'margin-left': 128-pkmncompar+'px'
});
$('.barometrebis').css('display', 'block');
}, 50);



L'idée, c'est d'obtenir un visuel permettant de comparer deux totaux d'une manière purement frontale :




L'ennui, c'est que que l'emploie d'un setTimeout ne me paraît pas très propre ni optimisé pour mon usage dans la mesure où le temps de réponse du serveur peut éventuellement faire capoter le script (si le serveur est un peu lent à répondre, ma fonction risque de se lancer avant la réception des informations envoyées par le serveur et ne rien donner), sinon, si je met un setTimeout un peu plus long, c'est l'expérience utilisateur qui risque d'en prendre un coups.

J'ai pensé, et ça fonctionne également, à remplacer mon setTimeout par un setInterval, mais là, c'est le navigateur qui se retrouve à faire un calcul incessant jusqu'à ce que les données serveurs aient été réceptionnées, mais également après que le tout ait bien matché, ce qui n'est franchement utile.

L'idée aurait donc été d'employer un setInterval pour lancer le calcul en boucle, mais d'arrêter de le lancer une fois que le résultat final ait bien aboutit :
j'ai tenté de vérifier la largeur d'une des div visée via un While (en gros, tant que la condition ma largeur de ma div = 0px, on balance la fonction, et quand elle fait plus de 0px, on arrête de la lire).
Sauf que ça plante totalement la page du navigateur.


Comment vous y prendriez-vous à ma place ?

Merci d'avance.

(Modifié par Lubrifixor le 22-05-2016 à 18:04)
Re: Proprification d'une fonction Jquery avec setInterval
le 24-05-2016 à 00:51 #
Je ne suis pas encore à jquerry, je préfère déjà maitriser js.

si tu as php/mysql sur ton serveur.
fais le calcul une seule fois coté serveur puis stocke en mémoire, tu n'enverras que le résultat.
la premiere fois que ta page php se charge elle verifie si le résultat existe.
si oui elle envoie le résultat.
si non elle le calcule et le stock en mémoire.

C'est mieux de faire le setTimeout pour vérifier l'arriver des données c'est tout.
et une fois les données arrivées lancer le calcul.
C'est super bizarre de lancer des calculs en boucle sans savoir si les données sont là.

d'où viennent les données, de ton serveur ou ailleurs ?
à quelles fréquences dois tu obtenir le résultat ? genre tes données changent toutes les heures ? les jours ? ...
Re: Proprification d'une fonction Jquery avec setInterval
le 24-05-2016 à 05:44 #
Salut,

Je suis pas sur de comprendre, les données sont dans une page statique ? Dans ce cas, la fonction ready() te permet d'attendre que tout soit chargé avant de lancer ton script.

$(document).ready(function() {

// ton code exécuté quand la page est entièrement chargée
});


Si les données sont obtenues dynamiquement, les fonctions AJAX permettent d'appeler une fonction en callback après réception.

var jqxhr = $.ajax( "example.php" )

.done(function() {
alert( "success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "complete" );
});


Ben
Anon258976
Profil Censuré
Re: Proprification d'une fonction Jquery avec setInterval
le 24-05-2016 à 23:01 #
Nickel, la requête ajax fonctionne à merveille. Merci beaucoups.
Du coups, je suis aussi en train de regarder du côté du .promise()... Si le .done() ici ne le sous-tend pas précisément, mais je nage à chaque fois que je vois un truc que je n'ai jamais mis en place.


à quelles fréquences dois tu obtenir le résultat ? genre tes données changent toutes les heures ? les jours ? ...

En fait, c'est l'utilisateur qui les appelle : il a des statistiques à propos d'un objet déterminé, et il peut appeler un autre objet de son choix via un champs texte qui gère dynamiquement l’auto complétion. C'est à ce moment là que les données appelées sont comparées et que je lance le calcul, mais sans callback tel que fourni par Ben, mon script lançait le calcul "à l'aveugle", là au moins, il ne le lance que lorsque les données sont réceptionnées.

C'est con, parceque j'ai déjà fait des requêtes Ajax avec apparition d'un bouton loader et disparition une fois les données reçues, donc ça aurait dû me sauter à la gueule immédiatement, c'est simplement élémentaire, même si je ne suis pas développeur de métier (en tant qu'intégrateur, je me contente du HTML et du CSS (+ les scripts twig en ce qui me concerne) sur les heures de travail).
Pour tout dire, là je suis un peut dans la situation du type qui est en train de mourir de faim et qui n'a pas pensé à ouvrir le frigo

(Modifié par Lubrifixor le 24-05-2016 à 23:01)




Ces discussions pourraient vous intéresser également:


jproblome avec le programme jquery
Ajouter la fonction de session
Changer la taille d'une frame en fonction du contenu
Hebergeurs gratuit acceptant la fonction mail()
Barre de progressement lors de l'exécution d'une fonction