[AJAX] A votre avis : quelle est la meilleure solution ?
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
Citation:
<?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);
?>
Approche 2 : approche2
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.
Citation:
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']);
$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;
Pour voir le code complet, il suffit de faire affiche code source sur les 2 pages de test
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 ?