[AJAX] Mise à jour d'une variable
Bonjour,
Tout fonctionne à merveille sauf que : :(
A l'aide de XMLHttpRequest nous chargeons dans deux "variables" (this.xmlTree et this.xsltTree) des données xml (dont la feuille de style xslt).
Une méthode de l'objet, this.affiche() sert à afficher le résultat de la transformation.
Le hic c'est que pour pouvoir afficher le résultat de la transformation,
Code:
this.laCible.innerHTML = this.xmlTree.transformNode(this.xsltTree);
il faut générer une alerte !
Et oui si avant la ligne de code ci-dessus il y a tout se passe à merveille sinon une erreur est produite signalant que this.xmlTree et que this.xsltTree sont undefined !
Pourtant, Firebugg montre bien que le code xml et xslt ont bien étaient importés via thiscurrent.xsltTree = x.responseXML;
Mon client évidemment ne veut pas de l'alerte et j'aimerais réussir l'opération sans elle.
Sans doute alert() appelle-t-elle le coeur de l'appli est met les variables à jour ? Je pense que vous devriez pouvoir m'aider...
Voici la partie du 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
|
function ObF8(){
this.leMessage = '';
this.ReReg = [];
this.xmlTree = null;
this.xsltTree = null;
this.laCible = document.getElementById('but');
this.al = 'Un instant';
this.F8traitement(but.name, veur);
this.F8xslt('/etXslt/chCli.xsl');
this.Affiche();
}
};
ObF8.prototype.F8traitement = function(champ, valeur){
//rien d'intéressant ici
var x = ajx();
var thiscurrent = this;//pour fermetures
x.open("post", "ajax.php", true);
x.onreadystatechange = function(){
if((x.readyState == 4)&& (x.status == 200)){
thiscurrent.xmlTree = x.responseXML;
}
};
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
x.send(param);
};
ObF8.prototype.F8xslt = function(url){
var x = ajx();
var thiscurrent = this;//pour fermetures
x.open("get", url, true);
x.onreadystatechange = function(){
if((x.readyState == 4)&& (x.status == 200)){
thiscurrent.xsltTree = x.responseXML;
}
};
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
x.send("");
};
ObF8.prototype.Affiche = function(){
alert(this.al);//C'EST ICI ! SANS CETTE ALERTE RIEN NE MARCHE, AVEC TOUT FONCTIONNE 0 MERVEILLE...
try{
this.laCible.innerHTML = this.xmlTree.transformNode(this.xsltTree);
}catch(exc){
var xsltProc = new XSLTProcessor();
xsltProc.importStylesheet(this.xsltTree);
var fragment = xsltProc.transformToFragment(this.xmlTree, document);
this.laCible.innerHTML = "";
this.laCible.appendChild(fragment);
}
}; |
Evidemment il est incomplet (200 lignes); mais il devrait vous aider à trouver le problème.
Merci