Haruskah saya memasukkan markup HTML dalam respons JSON saya?

13

Di situs e-commerce, saat menambahkan item ke troli, saya ingin menampilkan jendela sembulan dengan opsi yang dapat Anda pilih. Bayangkan Anda memesan iPod Shuffle dan sekarang Anda harus memilih warna dan teks untuk diukir.

Saya ingin jendela menjadi modal, jadi saya menggunakan lightbox yang diisi oleh panggilan Ajax. Sekarang saya punya dua opsi:

Opsi 1: Kirim hanya data, dan hasilkan markup HTML menggunakan JavaScript

Apa yang baik tentang ini adalah bahwa ia memangkas permintaan Ajax ke beruang minimum dan tidak mencampur data dengan markup.

Apa yang tidak begitu hebat tentang ini adalah bahwa sekarang saya harus menggunakan JavaScript untuk melakukan rendering, alih-alih memiliki mesin template di sisi server yang melakukannya. Saya mungkin bisa sedikit membersihkan pendekatan dengan menggunakan solusi templating sisi klien .

Opsi 2: Kirim markup HTML

Apa yang baik tentang ini adalah bahwa saya dapat memiliki mesin templating sisi-server yang sama yang saya gunakan untuk sisa tugas rendering saya (Django), melakukan rendering lightbox. JavaScript hanya digunakan untuk menyisipkan fragmen HTML ke halaman. Jadi jelas meninggalkan rendering ke mesin rendering. Masuk akal bagi saya.

Tapi saya merasa tidak nyaman mencampurkan data dan markup dalam panggilan Ajax untuk beberapa alasan. Saya tidak yakin apa yang membuat saya merasa tidak nyaman tentang hal itu. Maksud saya, ini adalah cara yang sama setiap halaman web disajikan - data plus markup - benar?

Mike M. Lin
sumber
Pertanyaan yang bagus Tetapi tampaknya milik stackoverflow.
Saeed Neamati
1
@SaeedNeamati Pertanyaan desain perangkat lunak, terutama pertanyaan konseptual whiteboard-y seperti yang ada di sini dan di luar topik di Stack Overflow .

Jawaban:

10

JSON seharusnya hanya berisi data dan tidak ada markup. Dalam jangka panjang, pendekatan ini lebih dapat diperluas karena ada potensi untuk menggunakan data JSON di bagian lain situs Anda. Jika Anda memasukkan markup maka menggunakan data yang sama untuk mengisi template lain menjadi jauh lebih sulit.

davidk01
sumber
2
Poin bagus tentang penggunaan kembali. Semua orang tampaknya memilih permintaan Ajax untuk hanya berisi data, dan tanpa markup, karena berbagai alasan. Tapi ini yang besar . Terima kasih.
Mike M. Lin
2
Belum lagi JSON tanpa markup lebih kecil dan menggunakan bandwidth lebih sedikit.
@JackManey: Juga poin yang bagus. Tetapi biaya sebenarnya dari bandwidth tambahan tidak terlalu banyak setelah Anda memakan biaya permintaan HTTP. Dan saya bisa membayangkan beberapa pengaturan di mana Anda tahu mesin klien sangat jelek sehingga akan dikenakan biaya lebih banyak untuk menghasilkan DOM real-time menggunakan JavaScript. Pikirkan: Aplikasi internal dengan pengguna di mesin / browser kuno.
Mike M. Lin
3

Saya akan mengirim data dalam permintaan dan membangun markup di js. Satu manfaat tambahan adalah penggunaan bandwidth akan lebih sedikit. Ini semacam preferensi pribadi tetapi menjaga markup sisi klien dari sisi server mungkin adalah ide yang lebih baik. Saya memiliki situs web Django juga dan saya hanya menggunakan sistem templating untuk meletakkan beberapa json varibles pada halaman (kurang dari ajax req. Untuk dibuat) dan menggunakan file src ketika mengembangkan pada mesin saya. Semua sisi klien dilakukan dengan ExtJS.

pamit
sumber
Saya suka ide Anda membakar data JSON ke halaman - tidak di sini karena saya tidak mengambil data tambahan sampai saya tahu barang apa yang Anda tambahkan ke keranjang Anda. Membuat permintaan untuk tata letak halaman, lalu sedetik untuk data tampaknya sudah umum akhir-akhir ini. Memiliki data dalam variabel JavaScript menghilangkan kebutuhan untuk permintaan HTTP kedua tanpa memiliki dua bit kode rendering yang berbeda (yaitu, klien dan server).
Mike M. Lin
Oh saya melihat server Anda tidak cukup maju untuk mengetahui apa yang pengguna akan masukkan ke dalam kereta sebelumnya;).
mundur
1

Saya pikir Anda sudah bicara tentang pro dan kontra dari keduanya. Mengapa tidak melihat opsi ke-3 agar javascript untuk lightbox Anda dihasilkan dari tampilan django. Lalu apakah JSON Anda hanya berisi data untuk memperbaruinya untuk setiap tampilan?

Apa yang Anda harus dapat lakukan adalah membungkus semua kode templating ke dalam variabel javascript dan kemudian output dengan javascript setelah menerima permintaan JSON di sisi klien.

Ryan Gibbons
sumber
Terima kasih balasannya. Itu sebenarnya yang saya maksud di opsi 1. Lightbox sebagai wadah akan dibakar ke halaman tetapi disembunyikan. Data JSON dari permintaan Ajax akan digunakan untuk menghasilkan konten dalam wadah. Beberapa konten itu akan ditandai menggunakan HTML. Bagaimana Anda menginterpretasikan opsi 1? Mungkin itu bisa menjadi pilihan ketiga saya.
Mike M. Lin
Saya sedang memikirkan sesuatu di sepanjang baris stackoverflow.com/questions/6008908/… ini kemudian menggunakan JSON untuk mengganti data setelah pemuatan awal
Ryan Gibbons
0

Anda harus menggunakan mesin template untuk markup dan menyimpan bidang tersembunyi di suatu tempat untuk menyimpan nilai, yang kemudian dapat Anda temukan di dokumen menggunakan pemilih.

Alex
sumber