Attendre la fin du fonction pour continuer

chrisotphe7502 Messages postés 24 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 2 novembre 2009 - 12 févr. 2009 à 09:09
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 - 17 mars 2009 à 14:37
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

chrisotphe7502 Messages postés 24 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 2 novembre 2009
12 févr. 2009 à 09:11
Petit oubli ... mafonction() = lec_session()
0
chrisotphe7502 Messages postés 24 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 2 novembre 2009
12 févr. 2009 à 10:00
Problème résolu, dsl pour le dérangement
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
12 févr. 2009 à 10:08
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
0
chrisotphe7502 Messages postés 24 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 2 novembre 2009
12 févr. 2009 à 14:28
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
12 févr. 2009 à 14:40
>>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();
0
chrisotphe7502 Messages postés 24 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 2 novembre 2009
12 févr. 2009 à 15:26
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 .
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
12 févr. 2009 à 15:39
>>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...
0
yakou32 Messages postés 32 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 3 avril 2015
17 mars 2009 à 11:22
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 !
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
17 mars 2009 à 11:42
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 !!!! )
@+
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
17 mars 2009 à 12:08
oulah !!! il fallait lire "évite les noms qui ressemblent par trop à ce que connait"...
0
yakou32 Messages postés 32 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 3 avril 2015
17 mars 2009 à 12:49
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);

        }
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
17 mars 2009 à 13:00
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 !
0
yakou32 Messages postés 32 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 3 avril 2015
17 mars 2009 à 13:24
:(
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...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
17 mars 2009 à 13:41
ce n'est pas plutôt un problème de cache ???
essayer : frm.src="url de la page/?"+new Date();
ça devrait aller mieux
@+
0
yakou32 Messages postés 32 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 3 avril 2015
17 mars 2009 à 14:25
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...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
17 mars 2009 à 14:37
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 )

@+
0
Rejoignez-nous