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] Optimisation d'un script qui fonctionne: Récupérer une donnée


Sujet :

AJAX

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut [AJAX] Optimisation d'un script qui fonctionne: Récupérer une donnée
    Bonjour,

    J'ai trouvé un script AJAX que j'ai adapté, ce code fonctionne très bien mais je ne comprends pas comment accéder aux conditions que j'écris en rouge ci- dessous, comment retourner ces valeurs du 2eme fichier ?

    Merci !

    Fichier 1
    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
    		
    function writediv(texte)
    {
      document.getElementById('doublon_or_not').innerHTML = texte;
    }
    
    function verifGroupe(groupe)
    {
    	if (groupe != '')
    	{
    		if (groupe.length > 20)
    			writediv('<span style="color:red"><b>'+groupe+' :</b> ce nom de groupe est trop long</span>');
    		else if (texte = file('check_doublon_groupe.php?groupe='+escape(groupe)))
    		{
    		if (texte == 1)
    			writediv('<span style="color:red"><b>'+groupe+' :</b> ce nom de groupe est deja pris</span>');
    		else if (texte == 2)
    			writediv('<span style="color:green"><b>'+groupe+' :</b> ce nom de groupe est libre</span>');
    		else
    			writediv(texte);
    		}
    	}
    	else
    		writediv('<span style="color:yellow"><b>'+groupe+'</b> Veuillez Entrer un nom de groupe</span>');
    }
    
    function file(fichier)
    {
    	if (window.XMLHttpRequest) // FIREFOX
    		xhr_object = new XMLHttpRequest();
    	else if (window.ActiveXObject) // IE
    		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    	else
    		return (false);
    	xhr_object.open("GET", fichier, false);
    	xhr_object.send(null);
    	if (xhr_object.readyState == 4)
    		return (xhr_object.responseText);
    	else 
    		return (false);
    }
    Fichier 2

    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
    		
    <?php
    	try
    	{
    		$bdd = new PDO('mysql:host=localhost;dbname=name', 'root', '');
    	}
    	catch(Exeption $e)
    	{
    		die('Erreur : '.$e->getmessage());
    	}
    	$reponse = $bdd->query("SELECT nom FROM groupes WHERE nom='".$_GET["groupe"]."'");
    	$reponse->execute();
    	$donnees = $reponse->fetch();
    	$reponse->closeCursor();
    
    ICI AU LIEU DE PRINTER, J'AIMERAIS RETOURNER 1 OU 2
    
    	echo ($donnees ? 1 : 2);
    ?>

  2. #2
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    J'ai un peu de mal à comprendre ton code qui n'est pas indenté mais je tente une réponse.
    Dans ton script PHP tu n'as pas beaucoup de solution si tu renvoies une réponse de type texte, la méthode la plus efficace est d'utiliser la fonction echo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo ($donnes ? 1 : 2);

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Bonsoir,

    Je viens d'éditer mon premier poste, j'ai indenté le code et j'ai au passage remplacé mes echo par ta proposition, seulement avec cette méthode, sur ma page ca me print 1 ou 2, je n'accède toujours pas aux conditions "texte == 1" ou "texte == 2" de mon premier fichier.

    Aussi peut être que plus d'explications sur mon objectif permettrons de mieux comprendre car en me relisant je m'appercois que j'ai crée mon 1er poste un peu rapidement

    Le but est de tester si ce que l'utilisateur entre dans un champ de formulaire existe (voir ci-dessous) dans ma bdd, si le résultat existe, je renvoie "1" du 2eme fichier au 1er et j'accède à la condition "if (texte == 1)" du premier fichier, sinon, je renvoie "2" du 2eme fichier au premier et j'entre de le "if (texte == 2)", le problème est qu'actuellement ces deux conditions ne servent à rien ! Et j'aimerais beaucoup pouvoir les exploiter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="groupe" id="groupe" onKeyUp="verifGroupe(this.value)"/>
    Merci !

  4. #4
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Pour ton code essaye de l'implémenter de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    texte = file('check_doublon_groupe.php?groupe='+escape(groupe)))
     
    if (texte == 1){
        writediv('<span style="color:red"><b>'+groupe+' :</b> ce nom de groupe est deja pris</span>');
    }else if (texte == 2){
        writediv('<span style="color:green"><b>'+groupe+' :</b> ce nom de groupe est libre</span>');
    }else{
        writediv(texte);
    }
    Je te conseille de gérer la longueur max avec l'attribut maxlength de la balise input plutôt que de faire le test en javascript.

    Suite à la modification de code, que vaut la variable texte renvoyée par le serveur ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Bonsoir,

    Je suppose que tu voulais dire (voir ci-dessous en rouge):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    texte = file('check_doublon_groupe.php?groupe='+escape(groupe));
     
    if (texte == 1){
        writediv('<span style="color:red"><b>'+groupe+' :</b> ce nom de groupe est deja pris</span>');
    }else if (texte == 2){
        writediv('<span style="color:green"><b>'+groupe+' :</b> ce nom de groupe est libre</span>');
    }else{
        writediv(texte);
    }
    J'ai ajouter un "alert(texte);" après l'assignation, et voila ce qu'il m'affiche lorsque je tape une touche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html>
    <head>
    <title>
    check_doublons
    </title>
    </head>
    <body>
    2
    </body>
    </html>
    Si j'ai bien comprit il me renvoie toutes les balises et le résultat dans la page au lieu de me renvoyer uniquement le résultat, comment éviter cela ?

    Merci !

  6. #6
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Voici un exemple complet de script qui fonctionne. J'ai simplifié la partie PHP en bouchonnant la réponse du serveur :

    check_doublon_groupe.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <html>
    	<head>
    		<script type="text/javascript" src="./check_doublon_groupe.js"></script>
    	</head>
    	<body>
    		<input type="text" name="groupe" id="groupe" onKeyUp="verifGroupe(this.value)" maxlength="20" />	
    		<div id="doublon_or_not"></div>
    	</body>
    </html>
    check_doublon_groupe.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
            // Traitement de la BDD
     
            // Renvoyer la réponse
            echo '1';
    ?>
    check_doublon_groupe.js
    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
     
    /**
     * Méthode permettant de récupérer le composant Ajax
     */
    function getXhr(){
    	var xhr = null; 
    	if(window.XMLHttpRequest){ // Firefox et autres
    	   xhr = new XMLHttpRequest(); 
    	}else if(window.ActiveXObject){ // Internet Explorer 
    	   try {
    	        xhr = new ActiveXObject("Msxml2.XMLHTTP");
    	    } catch (e) {
    	        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    	    }
    	} else { // XMLHttpRequest non supporté par le navigateur 
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    		xhr = false; 
    	} 
     
    	return xhr
    }
     
    /**
     * Méthode permettant de vérifier en asynchrone que le nm du groupe est disponible
     * @param _url adresse du script PHP
     * @param _groupe nom du groupe à tester
     */  
    function checkDoublonAjax(_url, _groupe){
    	var xhr = getXhr();
     
    	// Définir le traitement de la réponse Ajax
    	xhr.onreadystatechange = function(){		
    		if(xhr.readyState == 4 && xhr.status == 200){			
    			if (xhr.responseText == 1)
    				writediv('<span style="color:red"><b>' + _groupe + ' :</b> ce nom de groupe est deja pris</span>');
    			else if (xhr.responseText == 2)
    				writediv('<span style="color:green"><b>' + _groupe + ' :</b> ce nom de groupe est libre</span>');
    			else
    				writediv(xhr.responseText);
    		}
    	}
     
    	// Envoyer la requête Ajax
    	xhr.open("GET", _url, true);
    	xhr.send(null);
    }
     
    /**
     * Méthode permettant d'écrire un message à l'écran
     * @param _texte texte à afficher
     */
    function writediv(_texte){
    	var element = document.getElementById('doublon_or_not');
     
    	if(element != null){
    		element.innerHTML = _texte;
    	}
    }
     
    /**
      * Méthode permettant de vérifier l'unicité du groupe
      * @param _groupe nom du groupe à valider 
      */
    function verifGroupe(_groupe){
    	if (_groupe != ''){
    		checkDoublonAjax('check_doublon_groupe.php?groupe=' + escape(_groupe), _groupe);
    	}else{
    		writediv('<span style="color:yellow"><b>' + _groupe + '</b> Veuillez Entrer un nom de groupe</span>');
    	}
    }

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Merci beaucoup pour ce code et ses explications en commentaire qui me permettent de mieux m'y retrouver !

    Tout seul je n'y serai pas arrivé avant un long moment ! C'est vraiment sympa

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/09/2010, 02h53
  2. Script qui fonctionne sous FireFox mais pas sous IE
    Par Sebastien14 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/01/2009, 10h32
  3. [MySQL] vos avis sur un script qui fonctionne pas
    Par younek dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/12/2008, 16h47
  4. Ajax et XML. Mon script ne fonctionne pas.
    Par Dougui_bzh dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/07/2008, 09h04
  5. [Configuration] script qui fonctionne en mode console et non a partir d'un browser
    Par nannous dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 06/12/2006, 11h50

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