Ajax Xhr.responseText undefined

saadainese Messages postés 49 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,

j'ai un probelemme au niveau de Xhr.responseText, je m'explique.

J'ai un formulaire d'inscription ou je dois verifier si un email existe ou pas dans ma base de données , j'envoie alors une requete a une page check-email.php, qui echo"no" si lemail existe et echo "yes" sinon, dans la page du formulaire je fais une alert pour voir la valeur du xhr.responseText mais l'alerte affiche undefined, je ne sais plus comment faire, j'ai recherché sur le web mais ca ne marche pas, je vous laisse alors mon code et attend votre aide, et merci .
------------------------------------------formulairenewsletter.php--------------------------------------------------
<script type='text/javascript'>
function getXhr() {
var xhr = null;
if(window.XMLHttpRequest)
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){
try
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
function req_email(){
var Xhr = getXhr();
var email = document.formulaire.email.value;
Xhr.open("POST", "check_email.php",true);
Xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
Xhr.send("email="+email);
Xhr.onreadystatechange = function()
{
if(Xhr.readyState == 4 && Xhr.status == 200){
var reponse = Xhr.responseText;}
return reponse;
}
}


function validation(){
var reponse = req_email();
var verif = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,6}$/
var flag = true;
if((document.formulaire.email.value=="")||(verif.exec(document.formulaire.email.value) == null))
{
flag = false;
}
else if (reponse == "0")
{
flag = false;
}
else
{
document.formulaire.email.style.visibility= "hidden";
}
return flag;
}
</script>
<div class="newsletter">
<form method="post" action="" name="formulairenewsletter" onsubmit= "return validation();">
Newsletter:<input type="text" name="email" id="email"/><input type="submit" value="Ok"/</form></div>
------------------------------------------check-email.php--------------------------------------------------

<?php
$email = $_POST['email'];
$link = mysql_connect("localhost","root","");
mysql_select_db("mybd");
$req = "select * from newsletter where email='$email'";
$result = mysql_db_query("mybd",$req,$link) or die(mysql_error());
$resultat = mysql_fetch_array($result);
if($resultat){
echo "0";
$requete = "INSERT INTO newsletter (email) VALUES ('$email')";
$result = mysql_query($requete,$link) or die($requete ."----". mysql_error());}
else
echo "1";
mysql_close();
?>

17 réponses

Alain_42 Messages postés 5413 Statut Membre 894
 
Moi je n'ai jamais eu de soucis avec POST en Ajax
1
Smoking bird Messages postés 911 Statut Membre 58
 
Ba t'as bien de la chance :D, mais il me semble aussi que tu as plus de métier que moi^^, donc ça m'étonne pas franchement^^
0
Alain_42 Messages postés 5413 Statut Membre 894
 
Bonsoir,

J'avais commencé à ta répondre mais j'ai du m'absenter alors voici mes conclusions:

tu n'as pas mis de div pour recevoir l'innerHtml

et surtout tu n'as pas mis ton Xhr.onreadystatechange =..... au bon endroit, il le faut avant l'envoi !! he oui ça surprend mais c'est ainsi, il faut dire que faire de la réponse avant d'envoyer la question



essayes comme ça: (chez moi ça marche)

<html>
<head>
<script type='text/javascript'>
function validation(){
	var reponse = req_email();
	//alert(reponse);//ceci affiche undefined//
	var verif = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,6}$/
	var flag = true;
	if((document.getElementById("email").value=='Votre adresse email ici..')
	||(document.getElementById("email").value=="")
	||(verif.exec(document.getElementById("email").value) == null))
	{
	document.getElementById("email").style.border = 'red 1px solid';
	document.getElementById("spanemail").innerHTML='Email invalide..';
	flag = false;
	}
	else if (reponse == 0)
	{
	document.getElementById("email").style.border = 'red 1px solid';
	document.getElementById("spanemail").innerHTML="email deja existant";
	flag = false;
	}
	else
	{
	document.getElementById("email").style.visibility= "hidden";
	document.getElementById("spanemail").innerHTML="";
	}
	return flag;
}

function req_email(){
	var rep;
	var Xhr = getXhr();
	var email = document.getElementById("email").value;
	Xhr.onreadystatechange = function()
	{
	if(Xhr.readyState == 4 && Xhr.status == 200){
	rep=Xhr.responseText;
	alert(Xhr.responseText); 
	}
	return rep;
	}
	Xhr.open("POST","check_email.php",true);
	Xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	var data="email="+email;
	//alert("Val envoyée: "+data);
	Xhr.send(data);
	
	
	
}

function getXhr() {
	var xhr = null;
	if(window.XMLHttpRequest)
	xhr = new XMLHttpRequest();
	else if(window.ActiveXObject){
	try
	{
	xhr = new ActiveXObject("Msxml2.XMLHTTP");}
	catch (e)
	{
	xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	}
	else
	{
	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	xhr = false;
	}
	return xhr;
}
</script>
</head>
<body>
<div class="newsletter">Newsletter: <input type="text" id="email" >

<input type="button" value="ok" onclick= "return validation();"/></div>
<div id="spanemail"></div>
</body>
</html>
1
Alain_42 Messages postés 5413 Statut Membre 894
 
pour ton script chek-email.php

essayes comme ça:

------------------------------------------check-email.php--------------------------------------------------

<?php
$email = $_POST['email'];
$link = mysql_connect("localhost","root","");
mysql_select_db("mybd"); //es tu sur de ce nom de base ?
$req = "SELECT * FROM newsletter WHERE email='$email'";
$result = mysql_db_query("mybd",$req,$link) or die(mysql_error());
$nb_enr = mysql_num_rows($result);
if($nb_enr == 0){
	echo "0";
	$requete = "INSERT INTO newsletter (email) VALUES ('$email')";
	$result = mysql_query($requete,$link) or die($requete ."----". mysql_error());
}else{
	echo "1";
}
mysql_close();
?>
0
Smoking bird Messages postés 911 Statut Membre 58
 
t'as contrôlé ta var mail? T'as essayé en passant ton ajax en GET et non en POST? (j'ai toujours eu des soucis avec post en ajax...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
une anomalie:

dans ton JS tu mets: document.formulaire.email.value

hors ton formulaire se nomme: formulairenewesletter
0
Smoking bird Messages postés 911 Statut Membre 58
 
c'est de ça dont je parlais à propos de la var mail^^ à mon avis ça vient de là^^
0
saadainese Messages postés 49 Statut Membre 2
 
Merci pour vos reponses, mais je n'arrive pas encore a trouver la solution,
au fait j'ai changé ce matin, je ne travaille plus avec formulaire, voila la nouvelle version de mon code:
-----------------------------------------------ma page.php--------------------------
<html>
<head>
<script type='text/javascript'>
function validation(){
var reponse = req_email();
alert(reponse);//ceci affiche undefined//
var verif = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,6}$/
var flag = true;
if((document.getElementById("email").value=='Votre adresse email ici..')
||(document.getElementById("email").value=="")
||(verif.exec(document.getElementById("email").value) == null))
{
document.getElementById("email").style.border = 'red 1px solid';
document.getElementById("spanemail").innerHTML='Email invalide..';
flag = false;
}
else if (reponse == 0)
{
document.getElementById("email").style.border = 'red 1px solid';
document.getElementById("spanemail").innerHTML="email deja existant";
flag = false;
}
else
{
document.getElementById("email").style.visibility= "hidden";
document.getElementById("spanemail").innerHTML="";
}
return flag;
}
function req_email(){
var rep;
var Xhr = getXhr();
var email = document.getElementById("email").value;
Xhr.open("POST","check_email.php",true);
Xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
Xhr.send("email="+email);
alert(Xhr.responseText);
Xhr.onreadystatechange = function()
{
if(Xhr.readyState == 4 && Xhr.status == 200){
rep=Xhr.responseText;
}
}
return rep;
}
function getXhr() {
var xhr = null;
if(window.XMLHttpRequest)
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){
try
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
</script>
</head>
<body>
<div class="newsletter">Newsletter: <input type="text" id="email" >
<input type="button" value="ok" onclick= "return validation();"/></div>
</body>
-----------------------------------------------check_email.php--------------------------
<?php
$email = $_POST['email'];
$link = mysql_connect("localhost","root","");
mysql_select_db("mybd");
$req = "select * from newsletter where email='$email'";
$result = mysql_db_query("mybd",$req,$link) or die(mysql_error());
$resultat = mysql_fetch_array($result);
if($resultat){
$requete = "INSERT INTO newsletter (email) VALUES ('$email')";
$resultaa = mysql_query("mybd",$requete,$link) or die(mysql_error());
mysql_close();
echo 0;
}
else
echo 1;
?>
0
Smoking bird Messages postés 911 Statut Membre 58
 
fais des alert sur toutes les var précédant ton problème^^ histoire de définir celle qui coince
0
saadainese Messages postés 49 Statut Membre 2
 
je mets une alerte dans la fonction req_email alert(email)
ceci m'affiche l'email, xhr.send envoie cet email a la page check-email, celle ci doit retourner sur xhr.response text 1 ou 0, malheureusement ceci ne marche pas,
0
saadainese Messages postés 49 Statut Membre 2
 
ya t'il quelqu'un qui pourra m'expliquer pourquoi est ce que je ne recupere pas les valeur 0 et 1 qui sont dans les echo de la page check-email.php, dans Xhr.responseText ?? et que au lieu ca donne undefined ??
0
Smoking bird Messages postés 911 Statut Membre 58
 
fais echo $_POST['email']; dans ton check_email.php, pour vérifier la réception
0
Smoking bird Messages postés 911 Statut Membre 58
 
(ah et n'oublis pas de supprimer les espaces avant <?php et après ?>, c'est la cause de pas mal d'erreurs)
0
saadainese Messages postés 49 Statut Membre 2
 
j'ai meme tout enlever de la page check-email.php

j'ai mis

<?php
echo $_POST['email];
?>
et impossible de le recuperer dans xhr.responseText, ca donne undefined :s
0
Smoking bird Messages postés 911 Statut Membre 58
 
ton objet Xhr n'a alors peut être pas été récupéré dans ta fonction reqmail()

d'habitude je fais la création du xhr dans la fonction concernée, comme ça j'suis sûr qu'il n'y aura aucun problème

function getIn(){
var mdpToChk=document.getElementById('pass').value;
var button=document.getElementById('hand');
if(window.XMLHttpRequest)
{
var htr=new XMLHttpRequest();
}

if(window.ActiveXObject)
{
var htr=new ActiveXObject('Microsoft.XMLHTTP');
}
var url="connecter.php?pass="+mdpToChk;
htr.open("GET",url,false);
htr.send("null");
button.innerHTML=htr.responseText;
}
0
saadainese Messages postés 49 Statut Membre 2
 
non plus, ca ne marche pas, je ne crois pas que c'est a cause de ca, une question, est ce que la valeur de xhr.responsetext viens de echo qu'on mets dans check-email.php ?
0
Smoking bird Messages postés 911 Statut Membre 58
 
oui^^, en y regardant de plus près il est bizarre d'ailleurs ton fichier^^ test le sans ajax, si ça fonctionne, le problème vient pas de lui, sinon, ça vient de lui^^
0
Smoking bird Messages postés 911 Statut Membre 58
 
si t'as vraiment mis ça:
if($resultat){
$requete = "INSERT INTO newsletter (email) VALUES ('$email')";
$resultaa = mysql_query("mybd",$requete,$link) or die(mysql_error());
mysql_close();
echo 0;
}
else
echo 1;

c'est pas très bon^^

t'as pas terminé tes accolades, et je doute que ça fonctionne sans while pour balayer le retour de ta requête :s
0
Utilisateur anonyme
 
tu as inversé les deux fonctions req_email et validation
validation est appelé à la saisie et veut afficher la reponse
l affichage doit se faire au retour
je ne suis pas sur que ta fonction req_email retourne reponse
le fonction "nichée" seule retourne reponse



0