2010-10-26 5 views
2

C'est une situation que j'ai rencontrée plusieurs fois, je ne sais pas quelle est la meilleure approche.Chargement du nouveau contenu avec Ajax

Disons que j'ai un type de contenu dynamique que les utilisateurs peuvent ajouter via Ajax. Par exemple, prenez les commentaires de Stack Overflow - les gens peuvent ajouter des commentaires directement sur la page en utilisant Ajax. La question est, comment puis-je implémenter l'ajout lui-même du nouveau contenu. Par exemple, il ressemble à l'appel ajax que Stack Overflow utilise pour ajouter un commentaire, renvoie simplement html qui remplace tous les commentaires (pas seulement le nouveau). Cela permet d'économiser la logique redondante dans le code Javascript qui doit "savoir" à quoi ressemble le html.

Est-ce la meilleure approche? Si oui, quelle est la meilleure façon de l'implémenter dans Django pour qu'il n'y ait pas de redondance (c'est-à-dire que la vue n'ait pas besoin de savoir à quoi ressemble le html?)

Merci!

EDIT: Dans mon cas, il n'y a pas de risque que d'autres commentaires soient ajoutés entre-temps - il s'agit purement de la meilleure implémentation.

Répondre

4

Si le contenu est simple, j'obtiendrais JSON et compilerais le HTML dans jQuery. Si c'est compliqué, je créerais un template et j'appellerais render() dessus sur le serveur et retournerais le HTML (que jQuery pourrait ajouter à un autre contenu ou remplacer le contenu existant).

+0

Merci - c'est ce que j'ai fini par faire (en utilisant render_to_string pour rendre des snippets spécifiques.) –

+1

Un plugin jQuery que je vends toujours est taconite. (http://jquery.malsup.com/taconite/) Il peut permettre une interaction complexe AJAX/Django/navigateur sans nécessiter de neurones. :-) –

1

La raison de mettre à jour tous les commentaires est de prendre en compte d'autres commentaires que d'autres personnes ont pu soumettre entre-temps. Pour garder le site vraiment dynamique, vous pouvez le faire, ou même, lorsque la page est chargée, charger une variable avec le plus récent ID de commentaire soumis, et définir un minuteur qui vérifie s'il y a plus de commentaires depuis. s'il y en a, renvoyez-les en tant qu'objet JSON et ajoutez-les à la page en cours, une DIV à la fois. Ce serait ma façon préférée de le gérer, car vous pouvez alors cibler des actions basées sur l'identifiant ou le rel de chaque DIV, qui renvoie directement à l'ID du commentaire dans la base de données ...

+0

Thasnk - vous faites un bon point sur la raison de la mise à jour. J'ai mis à jour la question, puisque cette raison spécifique n'est pas importante pour moi en ce moment. –

1

Je ne suis pas compétent avec Django ni Python mais je suppose que la logique de base est similaire pour tous les langages côté serveur. Lors de la pesée des avantages et des inconvénients de l'une ou l'autre approche, les choses dépendent de ce que vous voulez optimiser. Si la bande passante est importante, il est évident que l'utilisation de JSON pur dans la communication réduit la latence par rapport à la transmission de code HTML déjà prêt. Toutefois, la duplication de la fonctionnalité d'affichage côté serveur vers Javascript est un processus fastidieux et sujet aux erreurs. Cela prend simplement beaucoup de temps. Personnellement, je pense que dans la plupart des cas (pour les sites à trafic faible et moyen), il est parfaitement possible de regrouper le fragment HTML côté serveur et de remplacer simplement le contenu d'un conteneur (par exemple div) dans un rappel AJAX fonction. Bien sûr, remplacer toute la page serait stupide, c'est pourquoi votre application Django doit prendre en charge la sortie de régions spécifiques du document.

Questions connexes