[AJAX] return fonction onreadystatechange
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 ! :calim2:
Je vous montre d'abord mon code
Code:
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 ! :lol:
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 ? :(