IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Accumulation de variables à l'appel d'une méthode Javascript (PILES ?)


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut Accumulation de variables à l'appel d'une méthode Javascript (PILES ?)
    Bonjour.

    Ce n'est pas facile à expliquer donc voici de suite le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //exécution d'une webmethod plusieurs fois de suite
    for (j =0; j <= i; j++)
    {
            PageMethods.Translate(selectedWordsTab[j], storeTranslation);
    }
     
    //seconde fonction Javascript appelée à la fin de l'exécution de la webmethod
    function storeTranslation(value)
        {
            alert(value):
        }

    Voilà, j'ai une boucle javascript dans laquelle j'apelle une webmethod qui va s'exécuter côté serveur et qui va ensuite appeler l'exécution d'une autre fonction Javascript.
    Dans l'exécution actuelle je constate que toutes les itérations de ma boucle s'exécutent de suite sans laisser le temps à la seconde méthode Javascprit de s'exécuter.

    Résultat, l'affichage dans la seconde fonction Javascript est inversé. Je présume que c'est dû au fait que les variables value renvoyée par la webmethod s'accumulent dans une pile de type LIFO. Pour changer la donne, il me faudrait une pile FIFO.

    Je ne sais pas comment fonctionne tout ceci en Javascript alors est-il possible de changer cela pour réordonner les variables value sans avoir à les stocker ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par défaut
    Si j'ai bien compris, le problème c'est que tu fais un appel a ton serveur par AJAX, et que tu exécute tous les appels à la suite, sans attendre le retour de la requete avant d'executer l'itération suivante.

    Enfin bref, il n'y a pas assez de code pour savoir ce qui se passe. Il n'y a pas de piles en JS, donc LIFO, FIFO… il faut le reste du programme js pour dire ce qu'il faut faire.

    Remarque que si t'as un tableau, un tonTableau.reverse(); peut faire l'affaire.

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut
    Le retour de la requête se fait dans la seconde fonction Javascript.
    Cela dit j'aimerai bien attendre la fin de l'exécution de la webmethod avant de faire l'itération suivante mais je ne pense pas que ce soit faisable. Je présume qu'un thread spécifique est créé pour exécuter la webmethod ...

    Le code que j'ai mis là est le code utile, le reste ne joue pas dans cette problématique mais si tu insistes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //##################################################################################"
        //display the words and translations in dynamic lines
        function storeTranslation(value)
        {
            var result;
            if (value == "")
                result = "The word does not exist";
            else result = value;
    	    document.getElementById('dynamic_part').innerHTML = document.getElementById('dynamic_part').innerHTML + "<label><strong>"+selectedWordsTab[nbWords]+"</strong></label> Translation : <strong><label>"+result+"</label></strong><br/>";
     
         document.getElementById('hidden_part').innerHTML = document.getElementById('hidden_part').innerHTML + "<input type='text' id="+nbWords+" value='"+result+"'/>";
         document.getElementById('hidden_part').innerHTML = document.getElementById('hidden_part').innerHTML +" <input type='button' value='Add/Edit the translation' onclick='setTranslation(\""+selectedWordsTab[nbWords]+"\", document.getElementById(\""+nbWords+"\").value);'/>";  
            nbWords = nbWords + 1;
        }
    La boucle elle est indépendante.
    Il apparait que ces lignes créées dynamiquement sont inversées par rapport à l'ordre d'appel de la webmethod

  4. #4
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Je pense que c'est plutot l'autre partie que tu devrais montrer, celle qui appele les web services.
    Cela dit j'aimerai bien attendre la fin de l'exécution de la webmethod avant de faire l'itération suivante mais je ne pense pas que ce soit faisable. Je présume qu'un thread spécifique est créé pour exécuter la webmethod ...
    A priori oui, si tu utilises l'objet xmlhttprequest, les appels sont (normalement) asychrones, c'est à dire threadés.

    Deux solutions à priori:
    - passer ton appel ajax en synchrone (mauvaise solution)
    - attendre que l'appel au web service soit terminé (réponse reçue) pour envoyer le suivant (bonne solution)

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut
    Bonjour
    Je n'utilise pas xmlhttprequest (ou alors implicitement). La webmethod est en C#.
    Elle est donc appelée par cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     PageMethods.Translate(selectedWordsTab[j], storeTranslation);
    La méthode C# Translate() fait tout un tas d'instructions et retourne un string qui devient argument de la méthode Javascript storeTranslation().
    C'est typiquement l'utilisation de webmethod C# en Javascript. Donc je ne vois pas comment vérifier la fin d'exécution de ma webmethod.

    (arf du coup j'aurais peut-être dû posté dans AJAX...désolé)

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Shargat Voir le message
    (arf du coup j'aurais peut-être dû posté dans AJAX)
    Ou C# plutôt, non ?

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/02/2012, 17h15
  2. [script.aculo.us] Appel d'une méthode javascript sur le callback onUpdate
    Par thibane dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 02/04/2008, 11h33
  3. Appel d'une méthode via une variable.
    Par seiryujay dans le forum Général Java
    Réponses: 7
    Dernier message: 14/11/2006, 09h56
  4. Réponses: 6
    Dernier message: 27/05/2005, 15h43
  5. Comment connaitre l'appelant d'une méthode
    Par Alec6 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/07/2004, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo