Ajax Xhr.responseText undefined
saadainese
Messages postés
49
Statut
Membre
-
Alain_42 Messages postés 5413 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();
?>
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();
?>
A voir également:
- Ajax responsetext undefined
- Undefined mail ✓ - Forum PHP
- Cannot read properties of undefined traduction - Forum Javascript
- Cannot set properties of null (setting 'classList') ✓ - Forum Javascript
- Uncaught TypeError: Cannot read property 'style' of null ✓ - Forum Javascript
- Erreur ajax ✓ - Forum Javascript
17 réponses
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^^
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)
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>
pour ton script chek-email.php
essayes comme ça:
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();
?>
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...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
une anomalie:
dans ton JS tu mets: document.formulaire.email.value
hors ton formulaire se nomme: formulairenewesletter
dans ton JS tu mets: document.formulaire.email.value
hors ton formulaire se nomme: formulairenewesletter
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;
?>
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;
?>
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,
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,
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 ??
(ah et n'oublis pas de supprimer les espaces avant <?php et après ?>, c'est la cause de pas mal d'erreurs)
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
j'ai mis
<?php
echo $_POST['email];
?>
et impossible de le recuperer dans xhr.responseText, ca donne undefined :s
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;
}
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;
}
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 ?
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^^
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
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