Récuperation POST xhr Ajax dans code PHP

Résolu/Fermé
druidou59 Messages postés 85 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2015 - 18 sept. 2011 à 16:45
druidou59 Messages postés 85 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2015 - 19 sept. 2011 à 09:08
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 !
A voir également:

2 réponses

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
druidou59 Messages postés 85 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2015
18 sept. 2011 à 17:01
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
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
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
druidou59 Messages postés 85 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2015
18 sept. 2011 à 17:15
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
non effectivement si tu veux juste enregistrer quelque chose tu n'as pas forcement besoin de "réponse" de la page de traitement
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 18/09/2011 à 21:51
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
druidou59 Messages postés 85 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2015
19 sept. 2011 à 09:08
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