Bonjour,
Voilà, dans le cadre d’une application « AJAX » , je me pose la question de savoir quelle est la meilleure approche entre les 2 solutions suivantes :
Principe :
J’ai une liste déroulante de catégories. Une fois qu’on sélectionne une catégorie, elle met à jour une seconde liste déroulante des produits correspondants. Je n’utilise pas XML. J’envoie une requête au serveur qui me répond via une réponse text.
Pour ce faire au niveau du script serveur (php) j’ai 2 approches possibles
Approche 1 approche1
Je génère le code html de toute la liste déroulante (liste fille = liste des produits) et je la renvoie à ma page principale. Là je la récupère et je remplace ma liste déroulante ( fille ) par la réponse du serveur via un innerHTML.
Code serveur
Approche 2 : approche2<?php
header("Cache-Control: no-cache, must-revalidate");
header('Content-Type: text/plain; charset=ISO-8859-1');
//Parmètrage connexion à la base
require_once ("include/ParametresConnexion.php");
$db = mysql_connect(SERVEUR, NOM,PASSE) or die(mysql_error());
mysql_select_db(BASE,$db) or die(mysql_error());
$req=mysql_query('select * from produit where pr_categorie='.$_POST['categorieID']);
echo "<select name='produits'>";
while($pdt=mysql_fetch_assoc($req))
{
echo "<option value='".$pdt['pr_id']."'>".$pdt['pr_libelle']."</option>";
}
echo '</select>';
mysql_close($cnx);
?>
je génère uniquement le code des options qui constitue la liste déroulante. Une fois récupéré dans la page principale, via une succession de split, je mets à jour ma liste déroulante fille.
Pour voir le code complet, il suffit de faire affiche code source sur les 2 pages de testrequire_once ("include/ParametresConnexion.php");
$db = mysql_connect(SERVEUR, NOM,PASSE) or die(mysql_error());
mysql_select_db(BASE,$db) or die(mysql_error());
$req=mysql_query('select * from produit where pr_categorie='.$_POST['categorieID']);
$pdt=mysql_fetch_assoc($req);
if ($pdt)
{
$resultat=$pdt['pr_id'].'*'.$pdt['pr_libelle'];
$pdt=mysql_fetch_assoc($req);
}
else
{
$resultat='';
}
while($pdt)
{
$resultat=$resultat.'/'.$pdt['pr_id'].'*'.$pdt['pr_libelle'];
$pdt=mysql_fetch_assoc($req);
}
mysql_close($cnx);
echo $resultat;
Si le résultat est le même, je me pose quand même la question de savoir si l’une ou l’autre méthode est meilleure.
Je pense notamment au faite que si je dois afficher des infos relatives au produit une fois sélectionné le produit dans la seconde liste déroulante, la 2ème approche est plus souple. En effet; dans ce cas là, le code côté serveur est plus simple, pas besoin de penser à toutes les infos qui devront être affichées. Il y a un meilleur découpage du code. On ne génére que ce qui change. voir Exemple
Quand pensez-vous ?
Partager