Récuperation POST xhr Ajax dans code PHP

Résolu
druidou59 Messages postés 87 Statut Membre -  
druidou59 Messages postés 87 Statut Membre -
Bonjour,

Je débute tout juste Ajax et j'essaye de transmettre du contenu en Ajax à un fichier PHP mais sans succès :(

- Voici le javascript :

var xhr = null;

if(window.XMLHttpRequest) // Firefox
xhr = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr = new ActiveXObject('Microsoft.XMLHTTP');
else { // XMLHttpRequest non supporté par le navigateur
alert('Votre navigateur ne supporte pas les objets XMLHTTPRequest...');
return;
}

xhr.open('POST', 'test.php', true);

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var data = RecoReac;
xhr.send(data);
xhr.onReadyStateChange = ResponseSave();
alert('test ' + data);
}

function ResponseSave() {

if (xhr.readyState == 4) {

}

- Voici mon code de test PHP

<?php
header('Content-type: text/html; charset=iso-8859-1');

print_r($_POST);

?>

Infos Utiles:

Avec la console de firebug je vois bien que le post à réussi (200)
En paramètre du post je vois également le texte contenu dans data mais en reponse j'ai un tableau vide.

Si quelqu'un sais me donner une piste ou m'aider un peu ça serait sympa.
Merci d'avance !

2 réponses

  1. gasg
     
    tu ne peux pas tout simplement "print" ce que tu envoi en $_POST, la page de traitement php renvoi du XML que tu dois parser par la suite.

    en plus, cette ligne est fausse:
    xhr.send(data);
    1
    1. druidou59 Messages postés 87 Statut Membre
       
      Merci pour cette réponse gasg
      Peux-tu être un peu plus explicite. Comment voir le xml que je reçois?
      Pourquoi la ligne xhr.send(data); est fausse?
      0
    2. gasg
       
      il manque le nom de la variable dans le send: xhr.send("data=" + data);

      dans la page de traitement tu dois génerer du XML, comme ca par exemple:

      echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
      echo "<root>";
      echo "<item id=\"" . $data['id'] . "\" />";
      echo ....
      echo ....
      echo "</root>";

      enfin, tu traverse "l'arbre" XML avec du javascript (DOM)

      je te conseil les tuto du site du zero qui sont bien expliqué
      0
    3. gasg
       
      voici le lien du tuto:
      http://www.siteduzero.com/tutoriel-3-4745-ajax-et-l-echange-de-donnees-en-javascript.html

      les 2 premiers chapitres suffisent deja a faire la pluspart des truc en ajax. Prend bien ton temps pour lire et relire le 2ieme chapitre qui doit etre parfaitement clair.
      0
    4. druidou59 Messages postés 87 Statut Membre
       
      Merci pour la correction du send ;)
      Pourquoi je dois passer obligatoirement par du XML.
      Mon but final est d'enregistrer le contenu de ma variable data dans ma BDD donc le xml ne va pas m'aider pour cela... si?
      0
    5. gasg
       
      non effectivement si tu veux juste enregistrer quelque chose tu n'as pas forcement besoin de "réponse" de la page de traitement
      0
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    si tu peux avec la fonction traitement de la réponse ajax ResponseSave faire une visualisation de la bonne exécution de ta page php d'insertion dans la bdd

    dans ta page php par exemple:

    if (isset($_POST['data'])) 
    { 
    $data = $_POST['data']; 
    $sql = mysql_query("INSERT INTO 'nom de table' ('nom de colonne') VALUES ('$data')") ; 
    //test si req bien executée 
    if($sql){ 
       $reponse="Insertion de ".$data." réussie dans la BDD "; 
    }else{ 
         $reponse="La requette d'insertion n'a pas fonctionné"; 
    } 
    //envoi de la reponse à Ajax 
    echo $reponse; 
    } 
    


    et dans ta fonction:

    function ResponseSave() { 
    
    if (xhr.readyState == 4) { 
       if (xhr.status == 200) { 
          
         var reponse=xhr.responseText; 
         alert(reponse); //boite d'alerte 
         //ou tu peux aussi ecrire dans un div a l'endroit voulu de ta page     (div identifié par un id="div_a_ecrire" par exemple) 
         //par la ligne ci dessous 
         //document.getElementById('div_a_ecrire').innerHTML=reponse; 
       } 
    } 
    
    } 
    1
    1. druidou59 Messages postés 87 Statut Membre
       
      Re Alain ;)

      Merci pour cette petite explication qui me servira surement dans un avenir proche ;)
      Je garde cela de coté pour une prochaine fois et met le sujet en résolu.
      0