variable globale

Default
,

Bonjour,

Voila je rencontre un petit problème

je veux recharger une fonction avec javascript en utilisant javascript apres 5 secondes , et si le resultat de l'api egale à 1 je veux recharger la fonction apres 60 secondes

    $(document).ready(function() {
        var loadP = 5;
        var launchAsk = function () {
        $.ajax({
            url: "/api/get/",
            dataType: "json",
            success: function(data){ 
                if(data != 0){     
                    loadP = 5 ; 
                    // autre code
                }else if( data == 1){      
                    loadP = 60 ;
                    // autre code
                    }
            }
        });
    };

    launchAsk();  
    setInterval(launchAsk, 1000 * loadP); 

    });

Ce que j'obtiens est touojours la se charge apres 5 secondes meme si la resultat egale à 1

Merci d'avance

4 Réponse

7314
,

setInterval est appelé une seule fois lorsque ton fichier est parsé. ce que tu dois faire c'est utiliser un Timeout dans le callback de ton API. c'estle seul moyen pour faire ce dont tu as besoin.

PS: à l'heure actuelle, ta fonction est exécutée toutes les 5s, pas 5s après l'appel. cela veut dire que si ton appel prend 4s, le prochain appel se fera 1s après.

53392
,

@prbaron, bah, nan, tu te trompe ;)
setInterval appelle bien une fonction toutes les x milisecondes.
c'est setTimeout qui appelle une fonction une fois apres x milisecondes ;)

mais la variable loadP n'a rien de globale ;)
elle est déclarée dans une fonction, donc locale à la fonction.

@plus

Pierre

17162
,

@Pierrot01: Tu n'as pas tout à fait tord, mais ce que voulait surtout à mon avis relever prbaron, c'est que son setInterval s'exécute toutes les 5 secondes qu'un appel ajax soit fait ou non, par conséquent lorsqu'un appel ajax est effectué, qu'il ait reçu la réponse ou non avant le nouvel appel de la fonction une nouvelle requête ajax sera faite quand même, il faudrait donc qu'il suspende le setInterval en attendant de recevoir la réponse de la dernière requête ajax en cours.
Je n'ai jamais essayé car je n'en ai pas encore eu l'utilité, mais je pense qu'il faudrait qu'il passe en argument la valeur de l'intervale à la fonction, de cette manière il devrait pouvoir modifier l'intervale à l'intérieur de celle-ci, mais dans ce cas autant utiliser le setTimeout et refaire appel à la fonction à l'intérieur de celle-ci.
Pour ce dernier point je ne fais qu'une supposition, car je ne maitrise pas tellement le JavaSccript.

7314
,

@Latark c'est tout à fait ce que je voulais dire dans mon commentaire. Merci d'avoir été plus clair pour moi!

je plussoie pour le setTimeout dans le callback de l'appel Ajax, cela sera plus simple pour maintenir et c'est le seul moyen de s'assurer que le prochain appel soit bien effectué 5s ou 60s après l'appel précédent. setInterval ne pourra jamais garantir cela.