Czy powinienem uwzględnić znaczniki HTML w odpowiedzi JSON?

13

Podczas dodawania przedmiotu do koszyka w witrynie e-commerce chciałbym wyświetlić wyskakujące okno z opcjami, które możesz wybrać. Wyobraź sobie, że zamawiasz iPoda Shuffle, a teraz musisz wybrać kolor i tekst do grawerowania.

Chciałbym, aby okno było modalne, więc używam lightbox wypełnionego wywołaniem Ajax. Teraz mam dwie opcje:

Opcja 1: Wyślij tylko dane i wygeneruj znaczniki HTML za pomocą JavaScript

Zaletą jest to, że ogranicza żądanie Ajax do minimum niedźwiedzia i nie łączy danych ze znacznikami.

Nie jest tak świetne w tym, że teraz muszę używać JavaScript do renderowania, zamiast mieć silnik szablonów po stronie serwera. Być może będę w stanie trochę oczyścić to podejście, używając rozwiązania szablonowego po stronie klienta .

Opcja 2: Wyślij znacznik HTML

Co dobre w tym, że mogę mieć ten sam silnik szablonów po stronie serwera, którego używam do reszty moich zadań renderowania (Django), do renderowania lightbox. JavaScript służy tylko do wstawiania fragmentu HTML na stronie. Więc wyraźnie pozostawia renderowanie w silniku renderującym. Dla mnie to ma sens.

Ale z jakiegoś powodu nie czuję się komfortowo mieszając dane i znaczniki w wywołaniu Ajax. Nie jestem pewien, co sprawia, że ​​czuję się z tego powodu nieswojo. Mam na myśli, że w ten sam sposób wyświetlana jest każda strona internetowa - dane plus znaczniki - prawda?

Mike M. Lin
źródło
Świetne pytanie. Ale wydaje się, że należy do stackoverflow.
Saeed Neamati,
1
@SaeedNeamati Pytania dotyczące projektowania oprogramowania, a zwłaszcza pytania koncepcyjne na tablicy, takie jak to, są tutaj na temat i nie na temat przepełnienia stosu .

Odpowiedzi:

10

JSON powinien po prostu zawierać dane i bez znaczników. Na dłuższą metę takie podejście jest bardziej rozszerzalne, ponieważ istnieje możliwość wykorzystania danych JSON w innych częściach witryny. Jeśli dodasz znaczniki, użycie tych samych danych do wypełnienia innego szablonu stanie się znacznie trudniejsze.

davidk01
źródło
2
Świetna uwaga na temat ponownego użycia. Wygląda na to, że wszyscy głosują na prośbę Ajax, aby zawierała tylko dane, a nie znaczniki, z różnych powodów. Ale ten jest duży . Dzięki.
Mike M. Lin
2
Nie wspominając o tym, że JSON bez znaczników jest mniejszy i zużywa mniejszą przepustowość.
@JackManey: Również dobra uwaga. Ale prawdziwy koszt dodatkowej przepustowości nie jest aż tak duży, gdy już zjesz koszt żądania HTTP. Mogę sobie wyobrazić niektóre konfiguracje, w których wiesz, że komputery klienckie są tak kiepskie, że wygenerowanie DOM w czasie rzeczywistym przy użyciu JavaScript byłoby bardziej kosztowne. Pomyśl: aplikacje wewnętrzne z użytkownikami na starożytnych maszynach / przeglądarkach.
Mike M. Lin
3

Prześlę dane w żądaniu i zbuduję znaczniki w js. Dodatkową korzyścią byłoby mniejsze zużycie przepustowości. To rodzaj osobistych preferencji, ale lepszym pomysłem jest utrzymywanie znaczników po stronie klienta z dala od strony serwera. Mam również witrynę internetową Django i używam systemu szablonów tylko do umieszczania na stronie niektórych zmiennych Json (do zrobienia mniej o jedno ajax) i używania plików SRC podczas programowania na moim komputerze. Cała strona klienta odbywa się za pomocą ExtJS.

pllee
źródło
Podoba mi się twój pomysł wypalenia danych JSON na stronie - nie tutaj, ponieważ nie pobieram dodatkowych danych, dopóki nie dowiem się, jaki przedmiot dodajesz do koszyka. Zgłaszanie prośby o układ strony, a następnie sekunda dla danych wydaje się być dziś powszechne. Posiadanie danych w zmiennej JavaScript eliminuje potrzebę drugiego żądania HTTP bez konieczności posiadania dwóch różnych bitów renderowania kodu (tj. Klienta i serwera).
Mike M. Lin
Och, widzę, że twój serwer nie jest wystarczająco zaawansowany, aby wiedzieć, co użytkownik zamierza wcześniej włożyć do koszyka;).
pllee
1

Myślę, że mówisz o zaletach i wadach obu. Popatrz na trzecią opcję generowania javascript dla twojego lightboksa z widoku django. Czy zatem Twój JSON zawiera dane, aby zaktualizować je dla każdego widoku?

Powinieneś być w stanie owinąć cały kod szablonu w zmienne javascript, a następnie wyprowadzić je za pomocą javascript po otrzymaniu żądania JSON po stronie klienta.

Ryan Gibbons
źródło
Dziękuję za odpowiedź. Właśnie to miałem na myśli w opcji 1. Lightbox jako kontener zostałby wypalony na stronie, ale ukryty. Dane JSON z żądania Ajax zostaną wykorzystane do wygenerowania zawartości w kontenerze. Niektóre z tych treści zostałyby oznaczone przy użyciu HTML. Jak interpretowałeś opcję 1? Może to może być moja trzecia opcja.
Mike M. Lin
Myślałem o czymś podobnym do tego stackoverflow.com/questions/6008908/..., a następnie użyłem JSON do zastąpienia danych po początkowym załadowaniu
Ryan Gibbons,
0

Powinieneś używać silnika szablonów do znaczników i przechowywać gdzieś ukryte pole do przechowywania wartości, które możesz następnie znaleźć w dokumencie za pomocą selektora.

Alex
źródło