Bonjour à tous,

Je fais actuellement une requête ajax vers mon serveur, retourne les valeurs au format JSON, et construit un tableau suivant les valeurs avec DOM...
A côté de ça mon problème a l'air ridicule mais je n'arrive pas à le résoudre !

Je vous montre d'abord mon code

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
param_tests_jmeter.Ajax = {
 
    jspFolder : '/ParamTestJMeter-portlet/jsp',
 
    getTests : function() {
        var xhr = this.getXhr();
        if (xhr === null) {
            alert("Your browser doesn't support XMLHttpRequest!");
            return;
        }
 
        var url = this.jspFolder+'/dynamic_request/getJMeterTests.jsp';
 
        // fonction appelée lors d'un changement d'état de la requête (de traitementMethods.jsp)
        xhr.onreadystatechange = function() {
            param_tests_jmeter.Ajax.stateChanged(xhr);
        };
        xhr.open("GET",url,true);
        xhr.send(null);
    },
 
    stateChanged : function(xhr) {
        // On vérifie que le requête s'est bien effectuée avant de continuer
        if (xhr.readyState === 4 &&
            xhr.status === 200) {
            // évaluation du message JSON (eval())
            var tableauValeurs = eval("(" + xhr.responseText + ")");
 
            //Construction de mon tableau
            param_tests_jmeter.Table.createTable('div_edit_table_jmeter');
            var imax = tableauValeurs.length;
            for (var i = 0; i < imax; i++)
                param_tests_jmeter.Table.addRow(tableauValeurs[i].name,
                                                tableauValeurs[i].environment,
                                                tableauValeurs[i].description,
                                                tableauValeurs[i].fileName,
                                                tableauValeurs[i].isActive);
        }
    },
 
    // récupération de l'objet XmlHttpRequest (ajax) permettant d'échanger des informations
    getXhr : function() {
        var xhr;
        try {
            // Firefox, Opera 8.0+, Safari
            xhr = new XMLHttpRequest();
        } catch (e) {
            // Internet Explorer
            try {
                xhr = new ActiveXObject('Msxml2.XMLHTTP');
            } catch (e) {
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            }
        }
        return xhr;
    }
};
mon problème donc et que j'aimerais faire un return de tableauValeurs pour pouvoir construire mon tableau hors de la fonction statechanged...
Le problème vous l'aurez deviné, c'est que si je fais ceci, ma construction du tableau s'exécute avant même d'avoir reçu les résultats.

J'ai tenté en synchrone avec le paramètre à false, mais c'est pas convaincant !

J'avais cru voir qu'on avait pas trop le choix et qu'on devait faire nos actions dans la fonction, mais je n'y crois pas ! Il y a forcément une solution !? Nan ?