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] A votre avis : quelle est la meilleure solution ?


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut [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
    <?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.
    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 ?
    Mieux vaut penser avant d'agir que d'agir en rêvant.

  2. #2
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par tavarlindar Voir le message
    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.
    De mon point de vue, cela répond très bien à ta question

    L'avantage de la solution 1 est qu'elle est simple à écrire. Pour une petite page perso, un exercice de cours ou un site web peu évolutif, cela peut suffire. Elle présente un gros inconvénient : la gestion de la Vue et celle du Modèle sont imbriquées. Je déconseille cela pour un site pro, un appli web d'entreprise ou quelque projet d'envergure moyenne ou grosse.

    La solution 2 est bien découplée. Elle sera plus facile à maintenir si la structure des données - ou de la mise en page - change. Cela dit, ce que tu fais là est de structurer tes données en mode texte selon un format qui t'est propre, puis de les analyser côté client (avec des fonctions de manipulation de chaînes dans ce cas). Or, pour l'échange de données structurées, il existe un 'langage' conçu tout exprès : XML. Dans le cas précis que tu cites - 2 champs à manipuler seulement - ça ne pose pas de problème, utiliser responseText est assez simple et clair. Mais dans le cas que tu cites, la solution 1 ne pose pas de problème non plus. Par contre, si d'aventure les choses étaient amenées à se complexifier un peu, le recours à XML pourrait être aussi intéressant, du point de vue de la robustesse du code et de son évolutivité, que le recours au découplage Vue/Modèle que tu utilises en 2.

  3. #3
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    Merci Herode pour ta réponse,

    Je te rejoins et grâce à toi, je prends conscience qu'il serait souhaitable de passer au XML ....
    mais ça complique le code au départ et surtout cela nécessite du temps pour apprendre XML.

    Ta réponse me conforte dans l'idée que quitte à mal développer autant le faire avec la solution 2 pour répondre à de simples besoins.
    XML étant plus évolutif car plus normé (en fin j'imagine).

    Merci encore pour ta réponse : ton post me set et va me servir par la suite , le courage d'apprendre xml.

    Bien à toi

    Tavar
    Mieux vaut penser avant d'agir que d'agir en rêvant.

  4. #4
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Je suis du même avis qu'Herode.

    Xml est vraiment la solution la plus claire pour échanger des informations entre client et serveur puisque finalement c'est juste un formalisme pour présenter tes données, après libre à toi coté client de les traiter de la façon dont tu as besoin.

    Au niveau du code serveur, ca va d'aussi simple à mettre en œuvre que dans ta première solution si tu crées ton arbre xml avec des echos (pour les utilisations basiques) à à peine plus complexe si tu utilises une api dédiée (pour les utilisations un peu plus avancées).

    La où c'est plus compliqué si tu débutes, c'est au niveau du traitement en javascript parce que les méthodes dédiées à la manipulation de xml sont vraiment bordéliques et pas intuitives pour un sou. Néanmoins, une fois que t'as pris le truc en main, tu peux vraiment en faire ce que tu veux avec.

    L'autre intérêt pour toi, c'est que si tu connais pas le xml, c'est vraiment l'occasion d'apprendre, parce que ca te sera toujours utile à un moment ou à un autre.

  5. #5
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    +1

    Il faut un peu de temps pour s'y mettre mais si tu envisages une utilisation fréquente d'ajax, au final tu gagnera en temps et en clarté.

  6. #6
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Pour des manipulations Javascript, JSON est moins riche mais plus facile à manipuler que le XML.

    On y retrouve l'évolutivité du XML...

    Le XML est vraiment pratique lorsque l'on a à faire des transformations et, là, on utilise XSLT. Mais est-ce vraiment le besoin pour de l'AJAX ? C'est plutôt du côté de XForms qu'il faut regarder pour avoir une bonne solution d'utilisation naturelle (pas besoin de Javascript !) d'échanges XML entre le client et le serveur.
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

Discussions similaires

  1. Réponses: 13
    Dernier message: 19/01/2013, 00h48
  2. Quelle est la meilleure solution ?
    Par sinasquax dans le forum C++
    Réponses: 15
    Dernier message: 25/12/2007, 03h43
  3. Quelle est la meilleure solution pour créer des Web Services?
    Par Flipmode dans le forum Services Web
    Réponses: 1
    Dernier message: 26/04/2007, 16h12
  4. Réponses: 5
    Dernier message: 07/06/2006, 23h05
  5. Quelles est la meilleur solution?
    Par le lotus dans le forum Flash
    Réponses: 2
    Dernier message: 31/01/2006, 15h53

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