JSON yanıtıma HTML işaretlemesi eklemeli miyim?


13

Bir e-ticaret sitesinde, bir sepete öğe eklerken, seçebileceğiniz seçeneklerin bulunduğu bir açılır pencere göstermek istiyorum. Bir iPod Shuffle siparişi verdiğinizi ve şimdi kazınacak rengi ve metni seçmeniz gerektiğini düşünün.

Pencerenin kalıcı olmasını istiyorum, bu yüzden Ajax çağrısı ile doldurulmuş bir ışık kutusu kullanıyorum . Şimdi iki seçeneğim var:

1. Seçenek: Yalnızca verileri gönderin ve JavaScript kullanarak HTML işaretlemesi oluşturun

Bu konuda güzel olan şey, Ajax isteğini ayı minimuma indirmesi ve verileri işaretleme ile karıştırmamasıdır.

Bu kadar harika olmayan şey, şimdi sunucu tarafında bir şablon motoru yapmak yerine, renderimi yapmak için JavaScript kullanmam gerektiğidir. Bir istemci tarafı şablon çözümü kullanarak yaklaşımı biraz temizleyebilirim .

2. Seçenek: HTML işaretlemesini gönderme

Bu konuda iyi olan, oluşturma görevlerimin geri kalanı (Django) için kullandığım aynı sunucu tarafı şablonlama motoruna sahip olabilmem, ışık kutusunun oluşturulmasını yapabilmem. JavaScript yalnızca HTML parçasını sayfaya eklemek için kullanılır. Dolayısıyla, oluşturmayı açıkça oluşturma motoruna bırakır. Bana mantıklı geldi.

Ama bir sebepten dolayı bir Ajax çağrısında veri ve işaretlemeyi karıştırmakta rahat hissetmiyorum. Beni bu konuda tedirgin eden şeyden emin değilim. Demek istediğim, her web sayfasının sunulduğu şekilde - veri artı biçimlendirme - değil mi?


Harika bir soru. Ancak yığın akışına ait gibi görünüyor.
Saeed Neamati

1
@SaeedNeamati Yazılım tasarım soruları, özellikle bunun gibi beyaz tahta-y kavramsal soruları burada konu üzerine ve Stack Overflow'da konu dışı .

Yanıtlar:


10

JSON yalnızca verileri içermeli ve biçimlendirme içermemelidir. Uzun vadede bu yaklaşım daha genişletilebilir çünkü sitenizin diğer bölümlerinde JSON verilerini kullanma potansiyeli vardır. İşaretleme eklerseniz, başka bir şablonu doldurmak için aynı verileri kullanmak daha zor hale gelir.


2
Yeniden kullanım hakkında büyük bir nokta. Herkes Ajax'ın çeşitli nedenlerden ötürü sadece veri içermesi ve biçimlendirme olmaması için oy kullandığı görülüyor. Ama bu büyük bir tane. Teşekkürler.
Mike M. Lin

2
İşaretleme olmadan JSON'un daha küçük olduğunu ve daha az bant genişliği kullandığını belirtmiyoruz.

@JackManey: Ayrıca iyi bir nokta. Ancak ek bant genişliğinin gerçek maliyeti, HTTP isteğinin maliyetini zaten yedikten sonra o kadar da değildir. İstemci makinelerinin o kadar berbat olduğunu bildiğiniz bazı kurulumları hayal edebilirim ki, JavaScript kullanarak DOM gerçek zamanlı oluşturmanın maliyeti daha yüksektir. Düşün: Eski makinelerdeki / tarayıcılardaki kullanıcılarla dahili uygulamalar.
Mike M. Lin

3

Ben istekte veri göndermek ve js biçimlendirme oluşturmak. Ek bir avantaj, daha az bant genişliği kullanımının olmasıdır. Bu kişisel bir tercihtir, ancak istemci tarafı işaretlemesini sunucu tarafından uzak tutmak muhtemelen daha iyi bir fikirdir. Ben de bir Django web sitesi var ve ben sadece (bazı yapmak için daha az ajax req.) Sayfada bazı json değişkenleri koymak ve benim makinede geliştirirken src dosyaları kullanarak için şablonlama sistemi kullanın. Tüm istemci tarafı ExtJS ile yapılır.


JSON verilerini sayfaya yazma fikrinizi seviyorum - sepetinize hangi öğeyi eklediğinizi öğrenene kadar ek verileri getirmediğim için burada değil. Sayfa düzeni için bir istekte bulunulduğunda, veriler için bir saniye bu günlerde yaygın görünüyor. Verilerin bir JavaScript değişkeninde bulunması, iki farklı oluşturma kodu (yani istemci ve sunucu) olmadan ikinci HTTP isteğine olan ihtiyacı ortadan kaldırır.
Mike M. Lin

Oh, sunucunuzun, kullanıcının önceden sepete ne koyacağını bilmek için yeterince gelişmiş olmadığını görüyorum;).
pllee

1

Her ikisinin de artıları ve eksileri hakkında konuştuğunuzu düşünüyorum. Neden ışık kutunuz için javascript django görünümünden oluşturulmuş bir 3. seçeneğine bakmıyorsunuz. O zaman JSON'unuz her görünüm için güncellenecek verileri içeriyor mu?

Yapmanız gereken şey, tüm şablon kodunu javascript değişkenlerine sarmak ve daha sonra istemci tarafında JSON isteği alındıktan sonra javascript ile çıktısını almaktır.


Cevap için teşekkürler. Aslında seçenek 1'de kastettiğim budur. Bir kap olarak ışık kutusu sayfaya yazılır, ancak gizlenir. Ajax isteğindeki JSON verileri, kaptaki içeriği oluşturmak için kullanılır. Bu içeriğin bir kısmı HTML kullanılarak işaretlenir. 1. seçeneği nasıl yorumladınız? Belki bu benim üçüncü seçeneğim olabilir.
Mike M. Lin

Bu stackoverflow.com/questions/6008908/… satırlarında bir şey düşünüyordum sonra ilk yükten sonra verileri değiştirmek için JSON kullanarak
Ryan Gibbons

0

İşaretleme için şablon motorunu kullanmalı ve değerleri depolamak için gizli bir alanı saklamalısınız, daha sonra bir seçici kullanarak belgede bulabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.