Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 18h31   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Par défaut Traiter le résultat d'une requête en AJAX

Re !

C'est la journée AJAX, et comme je suis une bille dans le domaine, me revoilà !

Ma problématique :

Dans [ma_page.php], j'ai un form pour lequel l'évènement onsubmit doit déclencher une fonction du genre verif('ident','fichier_traitement') (où 'ident' est une chaîne, et 'fichier_traitement' un fichier php).

Cette fonction doit :

- lancer une requete AJAX via une autre page [verif_ident.php] (dans cette page, il s'agit d'une requête SELECT sur une table, qui vérifie si la valeur 'ident' y est bien présente), et qui soit renvoie 1 ligne ($resultat = 1), soit n'en renvoie pas ($resultat = 0).
- transmet le '$resultat' comme réponse AJAX
- traite ce '$resultat' : si $resultat = 1 alors on affiche le contenu du 'fichier_traitement' (soit dans une div dans [ma_page.php], soit avec window.open dans une nouvelle fenêtre, mais là n'est pas {encore} le problème !), et si $resultat = 0 alors on est redirigé vers une page [erreur.php]

Ayant encore beaucoup, beaucoup de mal à rentrer dans la "logique AJAX", je n'ai absolument aucune idée de la façon dont je pourrais procéder...
Au moins je suis sûr d'1 chose, c'est que c'est possible... C'est déjà ça non ???!!!

Merci d'avance pour votre aide et vos retours d'expérience...
@+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 19h46   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Re,

Fait comme ce que tu as faits dans cette discussion et teste la valeur du responseText que renvoie ton php pour faire le traitement javascript.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 09h37   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Désolé andry mais je n'arrive pas à comprendre la logique des méthodes (get post head etc.) ni des réponses.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
	    xhr=getXhr();
	    xhr.open("POST", verif_ident.php, true);
	    xhr.onreadystatechange=function() 
                {
		    if(xhr.readyState == 4) {
			if(xhr.status == 200) { 
			    window.open(fichier_traitement,'Mon titre','Mes options');
			}
			else {
			    document.location.href="erreur.php";
			}
		     }
		 }
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	// Arguments
	xhr.send("ident="+ident);
Donc là, si j'ai bien compris, je demande l'exécution de mon fichier verif_ident.php qui contient une requête basée sur le critère 'ident'... Mais après ???
Ce que je ne pige pas du tout, c'est comment la valeur de $resultat (0 ou 1) qui est créée dans verif_ident.php après la requête select, est retournée comme réponse ???

Merci !

Citation:
Envoyé par andry.aime Voir le message
Re,

Fait comme ce que tu as faits dans cette discussion et teste la valeur du responseText que renvoie ton php pour faire le traitement javascript.

A+.
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 09h43   #4
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Je te conseille de lire ce tutoriel.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 10h34   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Citation:
Envoyé par andry.aime Voir le message
Je te conseille de lire ce tutoriel.
Merci mais ça reste trop "académique" à mon goût, j'aurais plus besoin de pratique que de théorie

Bon, j'ai avancé un peu... J'ai enfin compris (dites-moi qq même si je me trompe), que le résultat de ma requête était "écouté", c'est à dire avec un echo. Or, je n'avais pas mis d'echo dans le fichier verif_ident.php, seulement la définition de ma variable $resultat = 1 ou $resultat = 0. Comme quoi, quand je vous dis que je n'étais pas rentré dans la logique Ajax...! Va m'coucher moins bête ce soir..

Me voilà donc avec une fonction qui a évolué, sauf qu'elle ne fonctionne tout simplement pas (le 'alert' me donne 'reponse =', comme si xhr.responseText était null)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
function verifIdent(identif) {
	var Identifiant = identif;
	var xhr = getXhr();
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
			if (xhr.responseText == 1) {
				alert('réponse = 1');
			}
			else {
				alert('réponse = '+xhr.responseText);
			}
		}
	}
	xhr.open('POST','test_ident.php',true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xhr.send('ident='+Identifiant);
 
}
J'ai testé xhr.status, ça me donne 0 donc OK.
J'ai aussi testé ma requete en appelant directement mon fichier verif_ident.php?ident=blablabla, et ça me renvoie bien 1 en echo du $resultat.
Et dans la console d'erreur de FF, je n'ai aucune erreur. C'est juste que ça marche pas...
J'en ai marre
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 10h47   #6
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Code :
if (xhr.responseText == "1")
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h01   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Non, c'est pas ça le pb : mon xhr.responseText ne contient de toute façon rien : quand je fais alert('réponse = '+xhr.responseText) ça me donne "réponse =" (vide ou null)

Citation:
Envoyé par andry.aime Voir le message
Code :
if (xhr.responseText == "1")
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h02   #8
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Montre un peu la page php appelé.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h12   #9
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Citation:
Envoyé par andry.aime Voir le message
Montre un peu la page php appelé.
Voilà (verif_ident.php) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<?php
$ident = $_REQUEST['ident'];
 
include $connexion;
 
$requete = "SELECT identifiant FROM ma_table WHERE identifiant  = '".$ident."'";
$resultat = mysql_query($requete,$conn)  or die ('Erreur Rqt Ident : '.mysql_error() );
$total = mysql_num_rows($resultat);
if ($total >= 1) {
	$resultat = 1;
}
else {
	$resultat = 0;
}
 
echo $resultat;
?>
J'ai testé cette page "toute seule", ça fonctionne, pas d'erreur, et quand je renseigne un ident correct comme paramètre, ça m'affiche bien 1 en echo du résultat.
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h30   #10
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Remplace $_REQUEST par $_POST.
Fait un alert directement pour le responseText pour voir.
Code :
1
2
3
if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
				alert(xhr.responseText);
			}
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 12h02   #11
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
comme le souligne @andry.aime,
Code :
1
2
 
xhr.open('POST','test_ident.php',true);
tu as envoyé les données en méthode POST, à ce titre $_POST coté php te permet de récupérer ces données. Donc pour ton cas :
Code :
1
2
 
$_POST['ident'] = 'valeur';//cf. récupération des données envoyées par un formulaire en methode POST
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 12h05   #12
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
J'ai essayé avec $_POST et tout comme tu m'as dit, mais j'obtiens toujours "réponse=" (vide ou null)...
C'est à désespérer..

Citation:
Envoyé par andry.aime Voir le message
Remplace $_REQUEST par $_POST.
Fait un alert directement pour le responseText pour voir.
Code :
1
2
3
if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
				alert(xhr.responseText);
			}
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 13h27   #13
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
J'ai trouvé !!!!!

En fait c'est la méthode xhr.open qui apparemment ne supporte pas les noms de fichiers avec underscore : j'ai transformé text_ident.php en textident.php et là ça fonctionne !

Un grand grand merci à mes gentils contrributeurs auxquels j'ai fait perdre bcp de temps depuis hier soir

@+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h03.


 
 
 
 
Partenaires

Hébergement Web