Salut tout le monde !
Je commence à me mettre un peu à l'Ajax, histoire de découvrir son fonctionnement.
Mais je rencontre un petit problème avec la méthode send de l'objet XHR. En effet, celle-ci semble ne pas envoyer ce que je lui donne en paramètre au script PHP avec qui elle communique.
Il s'agit d'une application très simple, on saisi son adresse mail et un message. Et un mail est envoyé à quelqu'un (son adresse est incluse en dur dans le script PHP chargé d'envoyer le mail) avec son message et bien sur son adresse mail (celle de l'expéditeur).
Voici le code source (origine : www.competencemicro.com) :
ajax_php.html
mailer.php
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 <html> <head> <title> Courrier Ajax</title> <script language="Javascript"> function xmlhttpPost(strURL) { var xhr = null; var self = this; // Mozilla/Safari if (window.XMLHttpRequest) { self.xhr = new XMLHttpRequest(); } // IE else if (window.ActiveXObject) { self.xhr = new ActiveXObject("Microsoft.XMLHTTP"); } var URL = strURL + getquerystring(); self.xhr.open('POST', strURL , true); self.xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); self.xhr.onreadystatechange = function() { if (self.xhr.readyState == 4) { updatepage(self.xhr.responseText); } } self.xhr.send(getquerystring()); } function getquerystring() { var form = document.forms['mailerform']; var sender = form.sender.value; var message = form.message.value; qstr = 's=' + escape(sender) + '&m=' + escape(message); return qstr; } function updatepage(str){ document.getElementById("result").innerHTML = str; } </script> <style> p, input, textarea, div { font: bold 8pt verdana, sans-serif; } .result { color: red; } </style> </head> <form name="mailerform"> <p>Votre adresse : <input name="sender" type="text"> <br><br> Message :<br> <textarea name="message" cols=40 rows=5 wrap=soft></textarea> <input value="Envoyer" type="button" onclick='JavaScript:xmlhttpPost("mailer.php")'></p> <div id="result" class="result"></div> </form> </body> </html>
Avec ce code, je reçois bien le mail, mais l'adresse de l'expéditeur et le message sont vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?php $m=$_GET['m']; $s=$_GET['s']; mail("xxx@xxx.com","Courrier AJAX","$m","From: $s"); echo("Votre message a été transmis"); ?>
En fait, le script PHP ne reçoit aucune valeur...
Ce script fontionne très bien si on l'utilise directement dans un navigateur (ex : http://localhost/ajax/mailer.php?s=m....com&m=message)
La seule façon pour que cela marche, est d'inclure dans la variable strURL de la ligne
les paramètres (mail et message), et d'utiliser le paramètre null dans la méthode send de XHR, qui devient donc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part self.xhr.open('POST', strURL , true);
Par avance, merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part self.xhr.send(null);
Partager