JSON 응답에 HTML 마크 업을 포함시켜야합니까?


13

전자 상거래 사이트에서 장바구니에 상품을 추가 할 때 선택할 수있는 옵션이있는 팝업 창을 표시하고 싶습니다. iPod Shuffle을 주문하고 조각 할 색상과 텍스트를 선택해야한다고 상상해보십시오.

창을 모달로 만들고 싶습니다. 그래서 Ajax 호출로 채워진 라이트 박스를 사용하고 있습니다. 이제 두 가지 옵션이 있습니다.

옵션 1 : 데이터 만 전송하고 JavaScript를 사용하여 HTML 마크 업 생성

이것에 대한 좋은 점은 Ajax 요청을 최소한으로 줄이고 데이터를 마크 업과 혼합하지 않는다는 것입니다.

이것에 대해 좋지 않은 점은 이제 서버 측에 템플릿 엔진을 사용하는 대신 JavaScript를 사용하여 렌더링을 수행해야한다는 것입니다. 클라이언트 측 템플릿 솔루션 을 사용하여 접근 방식을 약간 정리할 수 있습니다 .

옵션 2 : HTML 마크 업 보내기

이것에 대한 좋은 점은 나머지 렌더링 작업 (Django)에 사용하는 것과 동일한 서버 측 템플릿 엔진을 가지고 라이트 박스를 렌더링 할 수 있다는 것입니다. JavaScript는 HTML 조각을 페이지에 삽입하는 데만 사용됩니다. 따라서 렌더링 엔진에 렌더링을 명확하게 남깁니다. 이해가 되네요

그러나 어떤 이유로 든 Ajax 호출에서 데이터와 마크 업을 편안하게 혼합하는 느낌이 들지 않습니다. 내가 왜 불안하다고 느끼는지 잘 모르겠습니다. 즉, 모든 웹 페이지가 제공되는 것과 같은 방식입니다-데이터 + 마크 업-맞습니까?


좋은 질문입니다. 그러나 stackoverflow에 속하는 것 같습니다.
Saeed Neamati

1
@SaeedNeamati 소프트웨어 디자인 관련 질문, 특히 이와 같은 화이트 보드 개념에 관한 질문은 여기 주제와 스택 오버플로에 관한 주제입니다 .

답변:


10

JSON은 데이터를 포함하고 마크 업이 없어야합니다. 장기적으로이 접근 방식은 사이트의 다른 부분에서 JSON 데이터를 사용할 가능성이 있기 때문에 더 확장 가능합니다. 마크 업을 포함하면 동일한 데이터를 사용하여 다른 템플릿을 채우는 것이 훨씬 어려워집니다.


2
재사용에 대한 좋은 지적. 모든 사람들이 다양한 이유로 Ajax 요청에 데이터 만 포함하고 마크 업은 포함하지 않기로 투표하는 것 같습니다. 그러나 이것은 것입니다. 감사.
Mike M. Lin

2
말할 것도없이 마크 업이없는 JSON은 더 작고 더 적은 대역폭을 사용합니다.

@ JackManey : 또한 좋은 지적입니다. 그러나 추가 대역폭의 실제 비용은 이미 HTTP 요청 비용을 먹은 후에는 그다지 많지 않습니다. 그리고 클라이언트 시스템이 너무 엉성하다는 것을 알고 JavaScript를 사용하여 DOM을 실시간으로 생성하는 데 더 많은 비용이 드는 일부 설정을 상상할 수 있습니다. 생각 : 고대 컴퓨터 / 브라우저 사용자와 내부 앱.
Mike M. Lin

3

요청에 데이터를 보내고 js에 태그를 작성합니다. 추가적인 이점은 대역폭 사용량이 적다는 것입니다. 개인적인 취향이지만 클라이언트 측 마크 업을 서버 측에서 멀리 유지하는 것이 좋습니다. Django 웹 사이트도 가지고 있으며 내 컴퓨터에서 개발할 때 페이지에 json varibles (아약스 요구 사항이 하나 적음)를 넣고 src 파일을 사용하는 템플릿 시스템 만 사용합니다. 모든 클라이언트 측은 ExtJS로 수행됩니다.


장바구니에 추가 할 항목을 알 때까지 추가 데이터를 가져 오지 않기 때문에 JSON 데이터를 페이지에 굽는 아이디어를 좋아합니다. 요즘 페이지 레이아웃을 요청하면 데이터에 대한 1 초가 일반적인 것 같습니다. JavaScript 변수에 데이터가 있으면 두 가지 다른 렌더링 코드 비트 (예 : 클라이언트 및 서버)가 없어도 두 번째 HTTP 요청이 필요하지 않습니다.
마이크 M. 린

오, 나는 서버가 사용자가 미리 카트에 넣을 내용을 알기에 충분하지 않다고 생각합니다.).
pllee

1

나는 당신이 두 가지의 장단점에 대해 이야기했다고 생각합니다. django 뷰에서 라이트 박스 용 자바 스크립트를 생성하는 세 번째 옵션을 보시겠습니까? 그런 다음 JSON에 각보기마다 업데이트 할 데이터가 포함되어 있습니까?

당신이 할 수있는 일은 모든 템플릿 코드를 자바 스크립트 변수로 감싸고 클라이언트 측에서 JSON 요청을받은 후 자바 스크립트로 출력하는 것입니다.


답장을 보내 주셔서 감사합니다. 이것이 실제로 옵션 1의 의미입니다. 컨테이너로서의 라이트 박스는 페이지에 구워 ​​지지만 숨겨집니다. Ajax 요청의 JSON 데이터는 컨테이너에서 컨텐츠를 생성하는 데 사용됩니다. 해당 컨텐츠 중 일부는 HTML을 사용하여 마크 업됩니다. 옵션 1을 어떻게 해석 했습니까? 어쩌면 그것은 나의 세 번째 옵션이 될 수 있습니다.
Mike M. Lin 3

나는이 stackoverflow.com/questions/6008908/ 의 라인을 따라 무언가를 생각하고 있었다… 그리고 초기로드 후 데이터를 대체하기 위해 JSON을 사용
Ryan Gibbons

0

마크 업에 템플릿 엔진을 사용하고 값을 저장하기 위해 숨겨진 필드를 유지해야합니다. 그러면 셀렉터를 사용하여 문서에서 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.