Bonjour à tous.
Voilà la situation.
Je fais des appels DWR successifs (1, 2 jusqu'à 5 admettons) pour récupérer des donnéesc côté serveur et mettre à jour des tableaux.
Je me suis arrangé pour faire "proprement" et n'utiliser qu'une seule fonction callback, car elle fait tout le temps la même chose.
Pour ça, j'utilise des closures dans mes appels, notamment pour pouvoir conserver des paramètres clients dans mon callback et les utiliser dans mon traitement (vParamsJS).
Je n'ai donc qu'une seule fonction (majListe) qui doit être appelée au retour de chaque appel serveur.
Le souci avec ce code, c'est qu'au fur et à mesure que les appels DWR renvoient leur réponse, ils rentrent tous dans le même callback (majListe) et les données s'écrasent. Au final, aucune liste n'est mise à jour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // Appel 1 DWR.methode1(param1, { callback: function(pDonneesDuServeur){ majListe(pDonneesDuServeur, vParamsJS); }, errorHandler: function(errorString, exception) { traitement...}); }); // Appel 2 ... // Appel 3 ... function majListe(pDonneesDuServeur, pParamsJS){ .... }
Je suis parti ensuite sur l'idée de créer des instances différentes de majListe : une instance par appel DWR. J'ai donc passé la fonction en attribut d'un objet.
Mon appel devient alors :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function majListeAccueilCallbackFactory(pListeResultat, pParamsJS){ this.listeResultat = pListeResultat; this.paramsJS = pParamsJS; var that = this; this.majListe = function(){ traitement qui utilise les référence à that... } } }
Problème, ça ne fonctionne toujours pas. Même symptôme, j'ai l'impression que le 2ème appel écrase les données serveur ce qui provoque le crash de la mise à jour de la 1ère liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // Appel DWR DWR.methode1(param1, { callback: function(pDonneesDuServeur){ var obj = new majListeAccueilCallbackFactory(pDonneesDuServeur, vParamsJS); obj.majListe(); }, errorHandler: function(errorString, exception) { traitement... } });
J'en fais appel à vous parce que là je suis un peu à cours de solution!
PS : la solution de créer autant de callback que d'appel fonctionne, mais comme j'ai potentiellement 25 appels différents, ça me dérange un peu d'écrire 25 callback identiques...
Partager