Dans un site de commerce électronique, lors de l'ajout d'un article à un panier, j'aimerais afficher une fenêtre contextuelle avec les options que vous pouvez choisir. Imaginez que vous commandez un iPod Shuffle et que vous devez maintenant choisir la couleur et le texte à graver.
J'aimerais que la fenêtre soit modale, donc j'utilise une lightbox remplie par un appel Ajax. Maintenant, j'ai deux options:
Option 1: envoyer uniquement les données et générer le balisage HTML à l'aide de JavaScript
Ce qui est bien, c'est qu'il réduit la demande Ajax au minimum et ne mélange pas les données avec le balisage.
Ce qui n'est pas si génial, c'est que je dois maintenant utiliser JavaScript pour faire mon rendu, au lieu d'avoir un moteur de modèle côté serveur. Je pourrais peut-être nettoyer un peu l'approche en utilisant une solution de modélisation côté client .
Option 2: envoyer le balisage HTML
Ce qui est bien, c'est que je peux avoir le même moteur de modèle côté serveur que j'utilise pour le reste de mes tâches de rendu (Django), faire le rendu de la lightbox. JavaScript n'est utilisé que pour insérer le fragment HTML dans la page. Il laisse donc clairement le rendu au moteur de rendu. Ça a du sens pour moi.
Mais je ne me sens pas à l'aise de mélanger les données et le balisage dans un appel Ajax pour une raison quelconque. Je ne sais pas ce qui me met mal à l'aise. Je veux dire, c'est la même façon dont chaque page Web est servie - données et balisage - non?
Réponses:
JSON devrait simplement contenir les données et aucun balisage. À long terme, cette approche est plus extensible car il existe un potentiel d'utilisation des données JSON dans d'autres parties de votre site. Si vous incluez le balisage, l'utilisation des mêmes données pour remplir un autre modèle devient beaucoup plus difficile.
la source
J'enverrais les données dans la demande et créerais le balisage en js. Un avantage supplémentaire serait qu'il y aurait moins d'utilisation de la bande passante. C'est une sorte de préférence personnelle, mais garder le balisage côté client loin du côté serveur est probablement une meilleure idée. J'ai également un site Web Django et j'utilise uniquement le système de modèles pour mettre des variables json sur la page (une demande ajax de moins à faire) et utiliser des fichiers src lors du développement sur ma machine. Tout le côté client se fait avec ExtJS.
la source
Je pense que vous avez parlé des avantages et des inconvénients des deux. Pourquoi ne pas envisager une troisième option pour que le javascript de votre lightbox soit généré à partir d'une vue django. Votre JSON contient-il simplement les données pour le mettre à jour pour chaque vue?
Ce que vous devriez pouvoir faire est d'envelopper tout le code de modèle dans des variables javascript, puis de les générer avec javascript après avoir reçu la demande JSON côté client.
la source
Vous devez utiliser le moteur de modèle pour le balisage et conserver un champ caché quelque part pour stocker les valeurs, que vous pouvez ensuite trouver dans le document à l'aide d'un sélecteur.
la source