Dichiarazione di non responsabilità: questa risposta non è d'accordo con la risposta corrente accettata. Mantenere una mente aperta e vedere perché. Stiamo solo cercando di condividere la conoscenza qui, giusto? Vai alla fine per TL; DR
Per chiunque ne sia inciampato ora, questa risposta cerca di attenersi al modello di progettazione di MVC nel contesto del web definito semplicemente di seguito:
- Modello: il livello di persistenza dei dati
- Visualizza: il sistema di template
- Controller: azione che ottiene i dati e li fornisce a una determinata vista
Non spiegherò il motivo per cui la separazione ha appena saputo che questo modello di progettazione è noto per essere più scalabile quando viene seguito in modo appropriato.
Alcuni altri termini (le sigle non significano davvero nulla):
- AJAX: niente più che una tecnica che utilizza javascript per ottenere dati e aggiornare quella pagina invece di aggiornare la pagina
- JSON: uno standard per i dati strutturati
Should I return the HTML as part of the JSON?
No, JSON dovrebbe essere solo rappresentazioni di dati. Questo fa parte del 'modello' in MVC. Se restituisci l'HTML reso nel tuo JSON, non puoi modificare l'implementazione della vista. Una volta ottenuto l'HTML reso, sei bloccato con esso.
Should I only return one or the other?
Sì, JSON fa parte del "modello" perché rappresenta i dati. HTML è parte della 'vista'. Quando hai HTML in una risposta JSON, stai restituendo dati con una vista al suo interno. Credo che questo non segua MVC.
Se qualcuno utilizza specificamente ASP.NET, ti consiglio di restituire un PartialView quando vuoi "restituire solo HTML" quando AJAXing. Tieni presente che devi solo restituire una vista parziale quando desideri modificare una determinata parte della pagina senza aggiornarla completamente (defAJAX). Questa risposta potrebbe essere di aiuto.
Should I return HTML, then make another AJAX call for the response?
Questa domanda potrebbe essere strana. Suppongo che l'obiettivo nel contesto sia quello di aggiornare la pagina senza aggiornarla completamente, ovvero AJAX. Quando "restituisci HTML" fai una chiamata AJAX per HTML e aggiorni una determinata parte della pagina dall'HTML reso. Non ha senso effettuare due chiamate AJAX perché la chiamata AJAX che fai per HTML dovrebbe già avere una "vista" renderizzata con le informazioni al suo interno.
Se si effettua una chiamata AJAX solo per i dati (in formato JSON), si prenderanno quei dati e si manipolerà il DOM utilizzando i dati, ovvero creare un elemento e inserire data.message.
Should I return HTML and store the response in data- tags?
No, non penso che avrebbe senso. Quello che stai cercando di fare è salvare lo 'stato' del documento nei tag dei dati e dovresti semplicemente 'salvare lo stato' semplicemente cambiando il testo degli elementi stessi.
TL; DR L'obiettivo finale delle chiamate AJAX è di cambiare lo stato del DOM senza aggiornare la pagina. Dovresti rendere AJAX per i dati (sotto forma di JSON) non renderizzati HTML perché questo è molto più flessibile e riutilizzabile.
Fai una chiamata AJAX per i dati quindi usa javascript per cambiare pagina.