Attendre la fin du fonction pour continuer

Signaler
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour,

mon problème est le suivant, je créé un site web embarqué que je programme en javascript et HTML. Dans une des pages web, j'appel une fonction au chargement, ensuite je souhaite utiliser un des résultat de cette fonction pour la suite de mon script, et le problème, c'est que cette fonction se termine après que je demande la variable en question. Un peu code ça sera surement plus clair ...

la page web :

<head></head>

for(i=0;i<n;i++){
    création de n checkbox
}
...

mon script js :

var n=0;

function lec_session() {
    $.ajax({
        url: "monscriptshell",
        success: function(data){
                  Incrémentation de la variable globale n
            }
    });
};

Voila, à chaque foid ma variable n est a 0 dans ma page web , si quelqu'un peu m'aider ça serai sympa, merci

16 réponses

Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Petit oubli ... mafonction() = lec_session()
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Problème résolu, dsl pour le dérangement
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
bonjour,
met tes instructions for(i=0;i<n;i++){  création de n checkbox } je suppose ?
dans la fonction ( peut-être à la place de Incrémentation de la variable globale n ? )
Cordialemen
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009

En fait je pouvais pas le faire comme ça parce que sinon les actions sur les checkbox n'étais pas pris en compte, en fait j'ai mis  for(i=0;i<n;i++){  création de n checkbox dans une fonction appelée avec setTimeout :

setTimeout ("mafonction()",500);

mafonction(){
       for(i=0;i<n;i++){  création de n checkbox }
}

Le tout dans le body de ma page web et ça marche nikel.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
>>je pouvais pas le faire comme ça parce que sinon
>>les actions sur les checkbox n'étais pas pris en compte,
navré... rien compris.
>>setTimeout ("mafonction()",500);
certes... mais tu n'es pas à l'abri d'un temps de
    réponse > à la 1/2 seconde.. on ne sait jamasi

en javascript lancer une fonction, ça lance la
fonction ET on continue immédiatement en séquence

tu fais
    function f1() { traitements 1 }
    ....
    f1();
    traitements 2

si on doit attendre la fin de f1, il faut faire :
    function f1()     {      traitements 1
                                 traitements 2   
                          }
    ...
    f1();
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Le temps de réponse est toujours inférieur à la 1/2 seconde dans mon apllication.
Sinon, les checkbox devaient permettre (en autre) de griser et dégriser des boutons. Quand je créée les checkboxs dans la fonction "lec_session", j'avais beau cliquer sur les checkbox, les boutons ne changés pas.
Je sais pas si c'est beaucoup plus clair, mais ça marche bien comme je l'ai et j'ai déjà essaye les technique que tu a énoncé ci-dessus et dans mon cas ça ne marchait pas.
Merci quand même .
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
>>Le temps de réponse est toujours inférieur à la 1/2 seconde dans mon apllication.
pas un problème d'application !
ça dépend du réseau, de la charge...
tu n'es pas à l'abri !

>>j'ai déjà essaye les technique que tu a énoncé ci-dessus et dans mon cas ça ne marchait pas.
il te restait probablement des erreurs

mais bon... si cela te satisfait...
Messages postés
32
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
3 avril 2015

Bonjour,

Je déterre un petit peu le sujet... J'ai un problème similaire à Chrisotphe, mais je préférerais mettre en oeuvre la solution de Bul3.
J'ai bien rassemblé les éléments dans une fonction, mais néanmoins, les deux traitements ne sont pas lancés l'un après l'autre.

Voici mon code :
function Reload(foo) {

        var frame = document.getElementById(foo);

        frame.src = frame.src;

        }

function Print(foo) {

        Reload(foo);

        window.frames[foo].focus();

        window.frames[foo].print();

        }

Il semble que l'impression soit lancée sans attendre que mon iframe ait été mise à jour...

J'ai du mal à comprendre la raison du pourquoi...

Merci pour le coup de pouce !
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
et ben....
tu lances Reload(foo), et immédiatement ! sans attendre la fin de la fonction
donc le chargement de la frame, on continue sur focus() et print !!!!!
probablement avant que la frame soit chargée !!!

function Rel(foo)
{ var frm = document.getElementById(foo);
  frm.src = frm.src;
  frm.focus();
  frm.print();       
}
function Prt(foo)
{    Rel(foo);        }

par exemple....
mais évite les noms qui resemble par trop à ce que connais le html/javascript....
un jour ou l'autre ça te posera des problèmes ( Reload, Print, frame !!!! )
@+
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
oulah !!! il fallait lire "évite les noms qui ressemblent par trop à ce que connait"...
Messages postés
32
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
3 avril 2015

OK, merci beaucoup, je crois avoir compris la nuance. :)

Tout fonctionne correctement avec le code ci-dessous (il semble que je doive utiliser window.frames[foo] pour récupérer mon iframe...)

function RldForPrt(foo) {

        var frm = document.getElementById(foo);

        frm.src = frm.src;

        window.frames[foo].focus();

        window.frames[foo].print();

        }

function Prt(foo) {

        RldForPrt(foo);

        }
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
effectivement IE ( pas encore testé avec IE 8 ??? )
getElementById d'un [i]frame ne plait pas de mémoire d'Alzheimer....

>>je crois avoir compris la nuance. :)
nickel !
Messages postés
32
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
3 avril 2015

:(
Ceci dit, en fait ça ne marche pas, il semble qu'une fonction en appelant une autre avec une série d'instructions les exécute simultanément aussi...
Le contenu est encore imprimé avant d'avoir été mis à jour...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
ce n'est pas plutôt un problème de cache ???
essayer : frm.src="url de la page/?"+new Date();
ça devrait aller mieux
@+
Messages postés
32
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
3 avril 2015

Et non.. Mon Url est précisément une url dynamique avec des variables d'url... Donc aucune raison que le cache contienne une version erronée de la cible.

Je suis finalement passé par un setTimeout... Après avoir écumé le web une bonne partie de la journée, je n'ai pas trouvé d'autre solution...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
setTimeout dans ce cas n'est possiblement
pas toujours correct ! ( si le délai de
réponse est > temps mis ! )

tester qu'un élément de la page chargée "soit ok"
( une image et .complete ? par exemple ) quitte
à d'abord effacer cette frame
et boucler tant que ce n'est pas le cas
( mais là, avec setTimeout )

@+