IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Méthode send de l'objet XHR


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [AJAX] Méthode send de l'objet XHR
    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
    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>
    mailer.php
    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");
    ?>
    Avec ce code, je reçois bien le mail, mais l'adresse de l'expéditeur et le message sont vide.
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.xhr.open('POST', strURL , true);
    les paramètres (mail et message), et d'utiliser le paramètre null dans la méthode send de XHR, qui devient donc :
    Par avance, merci pour votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Salut!

    L'objet xhr dispose de deux modes d'envoi des données qui sont GET et POST. Quand tu envois des données en POST comme tu le fais avec
    self.xhr.open('POST', strURL , true) et self.xhr.send(getquerystring()), le script mailer.php doit récupérer ces variables via $_POST.

    En revanche quand tu veux les envoyer en GET, il faut concaténer les variable du formulaire à strURL, puis utiliser la méthode self.xhr.send('GET', strURL, true) et self.xhr.send(null), et donc les récupérer avec $_GET.

    C'est aussi simple que cela. Dans ton cas, qui fonctionne très bien en mode post, il te suffit de modifier mailer.php et de remplacer les $_GET par $_POST

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci goulmak

    Effectivement, c'était tellement simple que je n'y ai pas pensé....

    Merci aussi pour l'info. sur la méthode GET et la concaténation.


    Faut dire que ça fait presque 1 an que j'ai pas fait de PHP, ou presque. Je suis un peu rouillé la

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    De rien

    Si le problème est résolu, pense à mettre résolu sur la discussion

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [c#] Méthode d'accès aux objets de ma form1
    Par SDuh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/03/2006, 11h21
  2. [VBA-E]La méthode 'Range' de l'objet '_Global' a échoué
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/02/2006, 16h00
  3. Réponses: 4
    Dernier message: 20/01/2006, 15h53
  4. [Wscript] probleme avec la méthode send
    Par machinTruc dans le forum Windows
    Réponses: 8
    Dernier message: 18/05/2005, 17h30
  5. Méthode Free d'un objet
    Par WebPac dans le forum Composants VCL
    Réponses: 3
    Dernier message: 12/10/2004, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo