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

JavaScript Discussion :

[AJAX] Double appel javascript


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activit� : Technophile Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par d�faut [AJAX] Double appel javascript
    Bonjour,

    J'ai d�velopp� une petite fonction ajax dans le but de mettre � jour le HTML d'un page (un td) en fonction d'une valeur d'un champ dans une base de donn�e.
    Voici cette fonction
    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
     
    if(this.value==5)
    { 
           function citySeek(evt)
           {
                            method: 'post',
                            contentType: 'application/x-www-form-urlencoded',
                            charset: 'UTF-8',
                            parameters: 'zip=01000',
                            onSuccess: function(transport)
                            {
                                    var root = transport.responseXML.firstChild;
                                    if(root.childNodes.length -1 > 1)
                                    {
                                            var input = document.createElement('select');
                                            input.className='inputBox';
                                            for(var i = 0 ; i <= root.childNodes.length - 1 ; i++)
                                            {
                                                    var city = root.childNodes[i].firstChild.nodeValue;
                                                    var elt = document.createElement('option');
                                                    var label = document.createTextNode(city);
                                                    elt.value=city;
                                                    elt.appendChild(label);
                                                    input.appendChild(elt);
                                            }
                                    }
                                    else if(root.childNodes.length -1 == 1)
                                    {
                                            var input = document.createElement('input');
                                            input.type='text';
                                            input.readonly='readonly';
                                    }
                                    else
                                    {
                                            alert('Veuillez saisir un code postal valide');
                                    }
                                    $('puter').appendChild(input);
                                    $('puter').size="120";
                            }
                    });
            }
    }
    mais voila, elle est effectu�e deux fois (enfin deux appels � Ajax sont pass�s).
    premi�re question pourquoi ?
    seconde interrogation de ma part : lorsque je fais unque je d�clanche sur l'�v�nement onkeyup (lors de la saisie), puisque je saisie cinq charact�res, la fonction se d�clenche (normal). quelconque l'appel et bien pass� une fois, et un seule fois.

  2. #2
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Bonjour,
    sur onkeyup, �a peut �tre la frappe du 5� caract�re (1� fois), puis la validation du champ par TAB ou ENTER (2� fois).
    Pourquoi ne pas utiliser onchange ?

    Sinon, � quoi fait r�f�rence le "this" de ta fonction ?

    A+

  3. #3
    Membre �prouv�
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activit� : Technophile Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par d�faut
    [QUOTE=E.Bzz;3810468]Bonjour,
    sur onkeyup, �a peut �tre la frappe du 5� caract�re (1� fois), puis la validation du champ par TAB ou ENTER (2� fois).
    Citation Envoy� par E.Bzz Voir le message
    Pourquoi ne pas utiliser onchange ?
    parce justement il faut appuer sur TAB
    mon but c'est que d�s que l'utilisateur � taper ces cinq caract�res, on modifie le contenu d'un champ (input)
    differencier ces deux actions, sera la solution mais je ne sais aps comment faire
    Citation Envoy� par E.Bzz Voir le message
    Sinon, � quoi fait r�f�rence le "this" de ta fonction ?
    � un element HTML
    le code javascript :
    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
    window.onload=init;
    function init()
    {
    	$('cp').onkeyup=citySeek;
    }
    function citySeek(evt)
    {
    	if(this.value.length==5)
    	{
    		new Ajax.Request('city-chooser.php', 
    		{
      			method: 'post',
    			contentType: 'application/x-www-form-urlencoded',
    			charset: 'UTF-8',
    			parameters: 'zip='+this.value,
      			onSuccess: function(transport) 
    			{
    				var root = transport.responseXML.firstChild;
    				if(root.childNodes.length > 2)
    				{
    					var input = document.createElement('select');
    					input.className='inputBox';
    					input.id='ville';
    					for(var i = 0 ; i <= root.childNodes.length - 1 ; i++)
    					{
    						var city = root.childNodes[i].firstChild.nodeValue;
    						var elt = document.createElement('option'); 
    						var label = document.createTextNode(city);
    						elt.value=city;
    						elt.appendChild(label);
    						var att= document.createAttribute('style');
    						att.value='width: 126px';
    						input.setAttributeNode(att);
    						input.appendChild(elt);
    					}
    				}
    				else if(root.childNodes.length == 1)
    				{
    					var input = document.createElement('input');
    					input.id='ville';
    					input.className='inputBox';
    					input.type='text';
    					input.value=root.childNodes[0].firstChild.nodeValue
    					var att= document.createAttribute('readonly');
    					att.value='readonly';
    					input.setAttributeNode(att);
    					var att= document.createAttribute('style');
    					att.value='width: 120px';
    					input.setAttributeNode(att);
    				}
    				else
    				{
    					alert('Veuillez saisir un code postal valide');
    					var input = document.createElement('input');
    					input.id='ville';
    					input.className='inputBox';
    					input.type='text';
    					input.value='Aucune ville correspondante';
    					var att= document.createAttribute('readonly');
    					att.value='readonly';
    					input.setAttributeNode(att);
    					var att= document.createAttribute('style');
    					att.value='width: 120px';
    					input.setAttributeNode(att);
    				}
    				$('puter').replaceChild(input,$('ville'));
      			}
    		});
    	}
    }
    le code 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
    <?php
            require_once('../include/param.inc');
            require_once('../class/Connexion.php');
            header('Content-type: application/xml; charset=UTF-8');
            $code=$_POST['zip'];
            $sql='SELECT `ville` FROM CODE_POSTAUX WHERE `code` = "'.$code.'"';
            $dbh=new Connexion();
            $rst=$dbh->execute($sql);
            unset($dbh);
            echo '<xml>';
            if(count($rst[0]) > 0)
            {
                    for($i = 0 ; $i <= count($rst) - 1 ; $i++)
                    {
                            echo '<city>'.ucfirst(strtolower(trim($rst[$i][0]))).'</city>';
                    }
            }
            else
            {
                    echo '<city></city>';
            }
            echo '</xml>'; 
    ?>

  4. #4
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Citation Envoy� par sliderman Voir le message
    parce justement il faut appuer sur TAB
    mon but c'est que d�s que l'utilisateur � taper ces cinq caract�res, on modifie le contenu d'un champ (input)
    Tu sais maintenant pourquoi il se d�clenche 2 fois (cf. ci-dessus)

    A+

  5. #5
    Membre �prouv�
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activit� : Technophile Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par d�faut
    Citation Envoy� par E.Bzz Voir le message
    Tu sais maintenant pourquoi il se d�clenche 2 fois (cf. ci-dessus)

    A+
    ouai
    mais je sais pas comment faire pour qu'il ne se d�clanche q'une fois
    (sans onchange, parce que �a oblige l'utilisateur � appuyer sur TAB)
    j'ai donc r�solu le soucis en rajoutant une condition
    if(evt.which!=13) // le 13 correspond au entr�e

  6. #6
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Citation Envoy� par sliderman Voir le message
    if(evt.which!=13) // le 13 correspond au entr�e
    Tu as donc toujours le probl�me avec TAB, non ?
    Il serait plus simple de tester la longueur saisie et ne d�clencher qu'� 5 (sans TAB)

    A+

  7. #7
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Citation Envoy� par sliderman Voir le message
    mais voila, elle est effectu�e deux fois (enfin deux appels � Ajax sont pass�s).
    premi�re question pourquoi ?
    Justement, pour comprendre mieux la situation, montre-nous plut�t l'appel ajax, dont le bout de code que tu nous as montr� utilise vraisemblablement la r�ponse.

Discussions similaires

  1. Appel javascript et interpr�tation double quote
    Par saluts92 dans le forum G�n�ral JavaScript
    R�ponses: 11
    Dernier message: 06/03/2015, 11h11
  2. [AJAX] javascript et ajax apres appel div
    Par mrtechno01 dans le forum AJAX
    R�ponses: 7
    Dernier message: 28/10/2010, 17h22
  3. [AJAX] Ajax et appel de fichiers javascripts
    Par Alexdezark dans le forum AJAX
    R�ponses: 2
    Dernier message: 13/12/2009, 14h56
  4. R�ponses: 8
    Dernier message: 19/07/2007, 12h15
  5. Alimenter le context sur un appel Javascript ?...
    Par Sylvain James dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 20/10/2003, 15h44

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