Bonjour tout le monde,
Voilà je viens vers vous car j'ai un souci avec une fonction AJAX
En gros voici ce que je cherche à faire :
Afficher les message d'erreur générer par JavaScript directement dans la langue de l'utilisateur
Avec PHP pas de souci, on définit des fichier langue contenant des constante, mais je ne connait pas de solution pour javascript
Je me suis donc dit que j'allait contourner le problème à l'aide d'AJAX, j'ai donc créer des fichier langue de constante à cet éffet
Voici mes sources de test
Fichier constante_fr.php ( il existe aussi en "en" et est charger par rapport à une variable de session PHP )
Ensuite le fichier appelé par la fonction AJAX "returnConst.php"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php define('JS_ERR1',"Erreur n°1"); define('JS_ERR2',"Erreur n°2"); define('JS_ERR3',"Erreur n°3"); etc.. ?>
Donc coté PHP ca fonctionne, maintenant la fonction AJAX
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 <?php include('constante_' . $_SESSION['langue'] . '.php'); function returnConst($cst){ $csts = get_defined_constants(); return (array_key_exists($cst,$csts)) ? $csts[$cst] : 'Erreur interne'; } $r = (isset($_GET['cst'])) ? returnConst($_GET['cst']) : "Erreur interne"; echo utf8_encode($r); // Petit test // echo returnConst('JS_ERR1'); // Test OK ?>
Source HTML de test
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 /* Création d'un objet XMLHttpRequest comptible IE,FF et lambda */ function Xhr(){ if(window.XMLHttpRequest){ return new XMLHttpRequest(); } else if(window.ActiveXObject){ return new ActiveXObject("Microsoft.XMLHTTP"); } else{ alert('Vous devez activer Javascript dans les options de votre navigateur'); } } /* Récupération de l'erreur et ecriture dans un div */ /* cst = La constante à aller chercher ( string ) */ /* cbl = div ciblé pour l'ecriture ( objet ou string ) */ function errXhr(cst,cbl){ var obj = (cbl.style) ? cbl : document.getElementById(cbl); var ajx = Xhr(); var file = "returnConst.php?cst="+cst; ajx.open("GET", file, false); ajx.send(null); var ret = ajx.responseText; // Réponse OK obj.innerHTML = ret; // ET ICI ECRIT UNDEFINED AU LIEU DU MESSAGE // obj.innerHTML = ajx.responseText; // IDEM "undefined" /* Test 1 */ // alert(ret); => OK affiche bien l'erreur dans l'alerte /* Test 2 */ // alert(obj.innerHTML); => OK affiche bien l'erreur dans l'alerte }
Voilà, donc au clic sur le bouton il doit m'afficher la valeur de la constante "JS_ERR1" qui est "Erreur N°1" dans le div confirm
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <html> <head> <title>Test</title> <script type="text/javascript" src="xhr.js"></script> </head> <body> <div id="confirm"></div> <input type="button" id="test" value="Tester" onclick="errXhr('JS_ERR1','confirm');" /> </body> </html>
Les différent alert que je fait me retourne bien "Erreur N°1"
1 - on fait un alert sur la variable JS "ret", ok "Erreur N°1" est bien dans le message d'alerte
2 - on fait un alert sur le contenu html de l'objet "innerHTML" après avoir ecris le message, ok "Erreur N°1" est bien dans le message d'alerte
3 - on ouvre la console firebug et on regarde le retour, ok "Erreur N°1" est bien le retour
Mais voilà au lieu d'ecrire le message d'erreur dans le div "confirm", il écrit "undefined"
Je ne voi vraiment pas d'ou peut venir le problème, puisque tout les test me retourne bien l'erreur souhaiter, mais il m'ecris toujours undefined dans le div
D'avance merci de votre aide, si vous ne comprennez rien à ce que je raconte, poser vos question je tacherai d'y répondre le plus précisément possible![]()
Partager