IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] xmlhttprequest ca ne marche pas..


Sujet :

AJAX

  1. #1
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut [AJAX] xmlhttprequest ca ne marche pas..
    Bonjour à tous,

    tout d'abord je vais commencer par m'excuser, car je pense que ce genre de post sur ce genre sujet ça doit plutôt être fréquent sur ce forum. Cependant c'est pour ma pars vraiment mon dernier recours car en effet malgré des dizaines de tutos et une bonne semaine de tentatives de toutes sortes je bloque sur l'utilisation de la classe xmlHTTPrequest dans le cas d'utilisation de la connexion d'un compte sur un site quelconque.

    Donc voici mon code source.

    Dans le connexion.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <!DOCTYPE html>
    <html>
        <head>
     
    		login : <input type='text' id='login' value=''/>
    <BR>
    password : <input type='password' id='password' value=''/>
    <BR>
    <input type='button' value='Connexion' onclick='valider()'/>
     
     
    		<script type="text/javascript">
    		function valider ()
    		{
    		if (document.getElementById("login").value != "" && document.getElementById("password") != "")
    		{
     
    			alert ("erreur4");
    			var xhr = new XMLHttpRequest();
    			xhr.open('POST', 'testcompte.php', true); //on on prepare la requete
    			xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    			xhr.send('param1=document.getElementById("login").value&param2=document.getElementById("password").value'); //on envoie la requete
     
     
    		 xhr.onreadystatechange = function() 
    			{
     
        			if (xhr.readyState == 4 && xhr.status == 200) 
    				{
    		 			if (xhr.responseText)
    			 		{
    			 			var doc=document.location.href;//l'adresse url
    			 			changePageSimple(doc);
    						alert (xhr.reponseText);
    		 			}
    		 			else
    		 			{
     
     
    		 			}
    		 		}
    			};
     
     
    		}
    		else
    		{
     
    		}
     
    		}
     
     
     
     
     
    		function changePageSimple(newpage)
    		{  
                setTimeout("window.location.href = '"+newpage+"" , 0 ); 
            }
     
    		</script>
     
     
        </head>
     
        <body> 
     
        </body>
    </html>
    Dans le tetcompte.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <body>
    <?php
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=customshare', 'root', '', $pdo_options);
     
    	$compte = $bdd->prepare('SELECT `login`, `password`, `status` FROM `compte` WHERE login = ? AND password = ?');
    	$compte->execute(array($_POST['param1'], $_POST['param2']));
     
    	$donnee = $compte->fetch();
     
     
    	if ($donnee != FALSE)
    	{
    		$result = 1;
    		$_SESSION['login'] = $donnee['login'];
    		$_SESSION['password'] = $donnee['password'];
    		$_SESSION['status'] = $donnee['status'];
     
    	}
    	else
    	{
    		$result = 0;
    	}
     
     
     
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    echo "Pourquoi ?";
    ?>
     
    </body>
    </html>
    J'attends donc votre aide avec impatience pour me débloquer!

    ROTTOT

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ben déjà, le contenu de la page, c'est dans le body qu'il faut le mettre, pas dans le head...

    Sinon, le problème, c'est quoi exactement ? Parce que "ça ne marche pas", c'est pas l'idéal pour t'aider à déboguer...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je trouve Bovino bien gentil.

    Vouloir faire de l'ajax, alors que tu ne maitrises manifestement pas les bases en html...
    + aucune explication de ton "problème"
    + aucun commentaire dans le code
    + manque de cohérence
    + ...
    Ca fait beaucoup pour un seul homme.

    Un indice ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$compte->execute(array($_POST['param1'], $_POST['param2']));

  4. #4
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Déjà merci de m'avoir répondu.

    Ensuite en effet le code ne ressemble a rien (pour le truc du body je sais j'avais la flemme de le bouger sachant que pour tester et comprendre le fonctionnement ca ne change pas grand chose...) mais c'en est bien le but je préfère écrire à "l'arrache" de façon plus simple pour moi pour me permettre de me remettre le problème globalement.

    Pour les commentaires je les ai enlevés avant de poster^^

    Ensuite pour le problème que j'ai franchement je vois pas comment être plus clair que j'arrive pas a utiliser xmlHttprequest. Si je n'arrive pas a comprendre son fonctionnement et que faire je peux pas vraiment dire ou ça bug...
    Je pense juste (et j'en doute) que mon problème viens de la réponse du script testcompte mais je ne pourrais en aucun cas l'affirmer. Juste que occasionnellement quand j'ai une réponse je reçois un undefined.

    Pour la ligne cité par jreaux62, juste comme ca le problème ne viendrais pas du fait que je devrais mettre les variables dans une variable locale d'abord?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Web 2.0, allez plus loin avec AJAX et XMLHttpRequest

    Citation Envoyé par ROTTOT Voir le message
    ... j'avais la flemme de le bouger ...
    Moi aussi, j'ai la flemme de répondre...

  6. #6
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    haha...

    C'est très agaçant comme discution enfin c'est pas vraiment une disctution puisqu'elle est à sens unique. En effet si les seuls postes que vous comptez mettre sur ce sujet ne sont pas constructives abstenez vous!
    Je préfère largement ne pas avoir de réponse en l'attente de quelqu'un avec un amabilité suffisante pour ouvrir une discution sérieuse et constructive que des réponse inapproprié et d'un ton plutot désagréable.

    Et pour guider les personnes qui sy interesse vraiment j'ai fait un test et le problème viendrais plutot de la première page.

    De plus j'aimerais confirmation du fait que pour renvoyer une donnée txt on utilise bien le echo?
    sinon j'aimerai bien quelques explications supplémentaires sur la façon de renvoyer la réponse du script serveur à la page faisant la requete.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 133
    Par défaut
    Je ne sais pas si ton problème est réglé mais je vais tenter de t'aider à faire ce que tu cherches à réaliser.

    Tout d'abord , regarde sur Firebug -> Réseau -> XHR , pour voir si ta page qui contient ta requête est bien appelée (car c'est peut-être un problème de chemin), tu peux également regarder dans l'onglet POST si tes paramètres sont bien passés. En gros grâce à Firebug tu vas pouvoir localiser la source de ton problème , pour ensuite essayer de le résoudre.

    Mais il faut bien l'utiliser !

    Bonne chance.
    Au cas où pour télécharger firebug : https://addons.mozilla.org/fr/firefox/addon/firebug/

  8. #8
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    J'ai quelqu'un qui a testé mon code et qui me dis que lui reçois une réponse...

    Ensuite les paramètre de mon POST sont en effet mal envoyé, en fait il faut que j'utilise la classe formdata.

    Je suppose donc en effet que mon erreur viens finalement de ma page qui exécute le script php puisque je reçois un undefined comme réponse.
    Cependant là je ne vois vraiment pas ce qui pose problème...

    Et puis sympa l'appli firebug!

    ps : avec firebug j'ai une réponse qui correspond à ce que je veux cependant lorsque je fais un alert de la réponse je reçois une undefined comme réponse. so what?

    ps: ps : je fais donc mon post ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var form = new FormData();
    		form.append('param1', document.getElementById("login").value);
    		form.append('param2', document.getElementById("password").value);
    xhr.send(form);
    et le poste ne fonctionne pas (c'est ce que j'ai remarqué avec firebug.

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 133
    Par défaut
    Personnellement je ne sais pas ce qu'est la classe formdata donc je ne sais pas à quoi elle peut servir !
    Essaye de nous donner un maximum d'exemple ? Les variables ou la variable que tu envoies à ta page de script sont elles bonnes ? (faire un echo des variables puis un exit() (fonction qui arrête l'exécution de ton code et tu pourras voir le contenu de tes variables.)
    Donc tu pourras voir si les variables sont bien passées, si elles le sont bien , et que la réponse est bonne , il faut voir si tu prend la réponse en XML ou en text (reponseXML ou reponsetext) mais aussi ce que tu veux faire réellement de ce que l'on te retourne.

    Essaye d'expliquer clairement ce que tu veux faire pour que j'essaye de te donner une base , que tu pourras ensuite ajuster à tes besoins.
    Car si tu fais un reponseText et que tu veux afficher les réponses dans des champs déjà existants, ça ne fonctionnera pas , où pas comme il le faut , donc explique tes besoins clairement et je tenterais de t'aider

  10. #10
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Bon alors j'ai enfin résolu mon problème tout d'abord une première erreur toute bête sur le alert qui affiche la réponse j'ai oublié un s pour xhr.responseText ....
    ensuite les paramétres passés dans le POST étaient mal formulé (j'ai abandonné le formdata j'arrive pas à l'utiliser avec des variables).
    Celà doit être plutot de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.send('param1='+document.getElementById("login").value+'&param2='+document.getElementById("password").value);
    Donc maintenant que j'ai réussi à gérer une simple requête ajax n'ayant pur but de renvoyer qu'un simple texte non structuré et donc avec peu de données exploitables, je me suis mis à essayer de renvoyer les résultats de ma requête sql pour pouvoir les traiter en JS.
    Cependant je me retrouve alors confronté à deux problèmes. Le premier pour renvoyer quelque chose je dois le faire sois sous une forme xml soit de texte. J'ai donc choisis de le renvoyer sous forme de teste JSON.
    Malheureusement une erreur se produit lorsque que je vois le résultat à l'arrivé. Je me retrouve avec une réponse ou le premier et le troisième nuplet ont disparu. Je me retrouve qu'avec le second.

    voici la réponse :

    [{"proprietaire":"rott","0":"rott","lien":"mlpoo","1":"mlpoo","localisation":null,"2":null,"nom fichier":"hello worl","3":"hello worl"},false]
    (c'est une bdd bidon^^)

    Voici donc mon code

    partie client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    xhr.onreadystatechange = function() 
    			{
    				alert("ca fonctionne");
     
        			if (xhr.readyState == 4 && xhr.status == 200) 
    				{
    		 			if (xhr.responseText)
    			 		{
    			 			alert ("erreur7");
     
     
    						alert (xhr.responseText);
    						donnee = eval('(' + xhr.responseText + ')');//Là je transforme ma reponse JSON en réponse exploitable en JS
    						alert ("ouaip");//je n'y accede pas
    		 			}
    		 			else
    		 			{
    			 			alert("erreur1");
     
    		 			}
    		 		}
    			};
    Ainsi que la partie serveur qui fait la requete sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $lien = $bdd->prepare('SELECT * FROM `liens` WHERE proprietaire = ?');
    	$lien->execute(array($_SESSION['login']));
     
    	$donnee = array();
     
     
    	if ($lien != NULL)// je range dans un tableau ma réponse sql
    	{
    			while ($fet = $lien->fetch()) 
       			{ 
        			$donnee[]=$lien->fetch();
     
        		}
    			echo json_encode($donnee);//là je renvoie une réponse organisé avec JSON
     
    	}
    Je suis pas vraiment sur de bien faire le tableau mais bon.

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 133
    Par défaut
    Si la réponse était mal faite , je pense que rien ne serait retourné !
    Alors essaye de tester tes variables une par une avant de les mettre en JSON pour voir si elle ne sont pas égale à null.
    Si elles le sont, c'est un problème dans ta/tes requetes, sinon c'est que tu as fait une erreur de syntaxe

    Je ne suis pas un expert en JSON, moi je l'aurais fait en XML

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 17/11/2009, 18h16
  2. [AJAX] xmlHTTPRequest qui ne fonctionne pas toujours.
    Par zeclubbeur dans le forum AJAX
    Réponses: 4
    Dernier message: 19/09/2009, 16h58
  3. [AJAX] xhr.open ne marche pas
    Par kamclasse dans le forum AJAX
    Réponses: 6
    Dernier message: 04/06/2009, 11h20
  4. [AJAX] Lightbox, MOOdalBox: ne marche pas dans ma page AJAX
    Par nims dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 18/10/2008, 21h32
  5. [AJAX] XMLHTTPREQUEST ne se met pas à jour :-/
    Par franckarts dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/08/2006, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo