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] un champs dynamique en plus


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de heteroclite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 81
    Points
    81
    Par défaut [AJAX] un champs dynamique en plus
    Bonjour,

    Je debute avec la technologie ajax et j'aimerais avoir un renseignement.
    J'ai trouvé un tres bon exemple de code, simple, permettant de selectioner un auteur dans un menu deroulant, et d'afficher dans un deuxieme menu deroulant l'ensemble de ses livres sans rechargement de la page. je vous mets le code ci dessous. Ma question est : comment dans ce code ajouter un champs dynamique supplementaire par exemple on choisi un auteur ...la liste des livres s'affiche.....on selectionne un des livre .....un autre champs donne le prix....

    Merci d'avance pour votre aide

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    <html>
    	<head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<script type='text/javascript'>
    			var xhr = null; 
     
    			function getXhr(){
    				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; 
    				} 
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function go(){
    				getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('livre').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajaxLivre.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('auteur');
    				idauteur = sel.options[sel.selectedIndex].value;
    				xhr.send("idAuteur="+idauteur);
    			}
    		</script>
    	</head>
    	<body>
    		<form>
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Auteurs</label>
    				<select name='auteur' id='auteur' onchange='go()'>
    					<option value='-1'>Aucun</option>
    					<?
    						mysql_connect("localhost","","");
    						mysql_select_db("");
    						$res = mysql_query("SELECT * FROM auteur ORDER BY nom");
    						while($row = mysql_fetch_assoc($res)){
    							echo "<option value='".$row["id"]."'>".$row["nom"]."</option>";
    						}
    					?>
    				</select>
    				<label>Livres</label>
    				<div id='livre' style='display:inline'>
    				<select name='livre'>
    					<option value='-1'>Choisir un auteur</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    	</body>
    </html>
     
     
     
     
    _________________________________________________________________
     
     
    <?php
    	echo "<select name='livre'>";
    	if(isset($_POST["idAuteur"])){
    		mysql_connect("localhost","","");
    						mysql_select_db("");
    		$res = mysql_query("SELECT id,titre FROM livre 
    			WHERE idAuteur=".$_POST["idAuteur"]." ORDER BY titre");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row["id"]."'>".$row["titre"]."</option>";
    		}
    	}
    	echo "</select>";
    ?>

  2. #2
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Je ferais 2 fonctions ajax similaires, comme celle que tu as déjà faites :

    La première fonction tu garde celle que tu as dèjà faite.
    La 2ème, tu la changes pour qu'elle POST sur une page différente ( xhr.open("POST","ajaxLivre.php",true); ) , que le InneHTML soit faite sur une balise différente et que ton xhr.send envoie une données portant sur livre et non plus sur l'auteur ( idlivre ? )


    Dans ta page principale tu insères ces 2 fonctions puis tu crées 3 div ( ou des balises supportant le id="" )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <div id="auteur">
    <select  onchange="fonction1();">
    ...
    </select>
    </div>
     
    <div id="livre">
    </div>
     
    <div id="prix">
    </div>
    Dans la page qui charge les livres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    récupération des données relatives à l'auteur
    ?>
     
    <select onchange="fonction2();">
    ...
    </select>

    Dans la page qui charge les prix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    récupération des données relatives au livre
    ?>
     
    <select>
    ...
    </select>

    Si cela peut t'éclairer un peu.
    Smiley de Plomb 2009
    Anciennement FrancoisIT

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

Discussions similaires

  1. [1.x] [Symfony2]Ajout des champs dynamiquement via ajax
    Par tweetboy dans le forum Symfony
    Réponses: 1
    Dernier message: 26/07/2012, 16h36
  2. Formulaire avec champ dynamique javascript/ajax
    Par Louka-65 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/07/2009, 16h34
  3. [CR] Taille champ dynamique
    Par reflex dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 06/08/2004, 08h43
  4. [struts] probleme champs dynamiques
    Par rocco dans le forum Struts 1
    Réponses: 28
    Dernier message: 07/06/2004, 21h26
  5. ajouter un champ dynamiquement à une instance de table
    Par maniack dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/02/2004, 23h58

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