|
Publicité | ||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 77 ![]() |
Bonjour.
Ce n'est pas facile à expliquer donc voici de suite le code : Code :
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 |
||
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Étudiant Inscription : avril 2009 Messages : 176 ![]() |
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. |
|
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 77 ![]() |
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 :
Il apparait que ces lignes créées dynamiquement sont inversées par rapport à l'ordre d'appel de la webmethod Dernière modification par Shargat ; 29/06/2009 à 16h32. |
||
|
|
00
|
|
|
#4 | |
![]() ![]() Inscription : janvier 2006 Messages : 1 107 ![]() |
Je pense que c'est plutot l'autre partie que tu devrais montrer, celle qui appele les web services.
Citation:
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) |
|
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 77 ![]() |
Bonjour
Je n'utilise pas xmlhttprequest (ou alors implicitement). La webmethod est en C#. Elle est donc appelée par cette instruction : Code :
PageMethods.Translate(selectedWordsTab[j], 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é) |
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : janvier 2007 Messages : 9 037 ![]() |
|
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 77 ![]() |
Bah la question porte côté client. Le code C# est totalement indépendant.
|
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2007 Messages : 9 037 ![]() |
Ben, c'est lui qui gère l'échange Ajax, on dirait (si Ajax il y a ...)A+
|
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 77 ![]() |
Oui mais l'instruction qui gère cela est côté client :
Code :
PageMethods.Translate(selectedWordsTab[j], storeTranslation); |
|
|
00
|
|
|
#10 | |
![]() ![]() Inscription : janvier 2007 Messages : 9 037 ![]() |
Citation:
Par exemple, savoir si les appels Ajax sont gérés en synchones ou asynchrone (ça semble être le 2°) ? Comment est gérée la pile de réponses ? Ce ne sont pas des questions "JavaScript" (ni même Ajax, puisque ce n'est pas ton code qui gère ces problèmes directement). A+ |
|
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 77 ![]() |
Bon bah tant pis, je pensais que PageMethods était un objet Javascript.
Désolé |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : octobre 2003 Messages : 2 886 ![]() |
Je me disais bien que "Webmethod" me disait quelque chose! Le deuxième argument de la méthode est la fonction à appeler en cas de succès. Boucler directement sur Translate c'est oublier le caractère asynchrone d'Ajax.
Il faut plutôt l'appeler de nouveau dans storeTranslation. Dernière modification par franculo_caoulene ; 30/06/2009 à 11h53. |
|
|
00
|
|
|
#13 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 77 ![]() |
AH mais oui bien sûr. La voilà la solution.
De cette façon je contrôle l'ordre d'exécution et je passe outre le caractère asynchrone. Merci bien pour votre aide. |
|
|
00
|
|
|
#14 |
![]() ![]() Inscription : janvier 2007 Messages : 9 037 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com