web-dev-qa-db-fra.com

Devrais-je inclure le balisage HTML dans ma réponse JSON?

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 commandiez un iPod shuffle et vous devez maintenant choisir la couleur et le texte à graver.

Je voudrais que la fenêtre soit modale, alors j'utilise une Lightbox peuplée d'un appel Ajax. Maintenant, j'ai deux options:

Option 1: Envoyez uniquement les données et générez le balisage HTML à l'aide de JavaScript

Ce qui est agréable à ce sujet, c'est qu'il élimine la demande Ajax au minimum d'ours et ne mélange pas les données avec le balisage.

Ce n'est pas si bon à ce sujet est que maintenant, je dois utiliser JavaScript pour faire mon rendu, au lieu d'avoir un moteur de modèle sur le côté serveur le faire. Je pourrais peut-être nettoyer un peu l'approche en utilisant ne solution de modèles côté client .

Option 2: Envoyez le balisage HTML

Ce qui est bon, c'est que je peux avoir le même moteur de modèles côté serveur que j'utilise pour le reste de mes tâches de rendu (Django), faites le rendu de la Lightbox. JavaScript n'est utilisé que pour insérer le fragment HTML dans la page. Donc, il laisse clairement le rendu au moteur de rendu. A du sens pour moi.

Mais je ne me sens pas à l'aise de mélanger des données et un balisage dans un appel Ajax pour une raison quelconque. Je ne suis pas sûr de ce qui me rend mal à l'aise. Je veux dire, c'est la même manière que chaque page Web est servie - Data Plus Markup - Droite?

13
Mike M. Lin

JSON devrait simplement contenir les données et aucun balisage. À long terme, cette approche est plus extensible car il est possible d'utiliser les données JSON dans d'autres parties de votre site. Si vous incluez un marquage, utilisez les mêmes données pour remplir un autre modèle devient beaucoup plus difficile.

10
davidk01

J'enverrais les données dans la demande et construit le balisage dans 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 il est probablement une meilleure idée du côté du serveur. J'ai un Django site Web aussi et je n'utilise que le système de modèles pour mettre des variables JSON sur la page (une req d'AJAX de moins. Pour faire) et utiliser des fichiers SRC lorsque vous développez sur ma machine. Tout le côté client est fait avec ExtJS.

3
pllee