Domanda

I vuole costruire pagina web con "degradazione scalabile". Cioè, le funzioni della pagina web anche JavaScript è disabilitato. Ora devo prendere decisioni di progettazione sul formato della risposta AJAX.

Se JavaScript è disabilitato, ogni richiesta HTTP al server genererà HTML come risposta. Le rinfresca browser con la HTML restituita. Questo va bene.

Se javascript è abilitato, ogni richiesta HTTP AJAX al server genera ... beh, JSON o HTML.

Se è HTML, è facile da implementare. Basta avere javascript per sostituire parte della pagina con il codice HTML restituito. E, nel lato server, è necessario non molto modifica del codice.

Se è JSON, allora devo implementare la logica JSON-to-html in javascript di nuovo che è quasi duplicato della logica lato server. La duplicazione è male . Io davvero non mi piace. Il vantaggio è che il consumo di banda è meglio di HTML, che porta migliori prestazioni.

Quindi, qual è la soluzione migliore per Graceful Degradation? richiesta AJAX meglio per tornare JSON o HTML?

È stato utile?

Soluzione

Non credo ci può essere una 'migliore in soluzione per qualsiasi data situazione. Solo forse, una 'soluzione appropriata' per uno in particolare. Dipende da cosa si sta cercando di fare. Cosa significa per me graceful degradation è:

  • costruire un'interfaccia 'abbastanza buono' che funziona su come molti browser (desktop e mobile) possibile.
  • Discretamente aggiuntivo in qualche script (metodi di validazione, elementi di interfaccia quali schede e cursori o qualsiasi altra cosa) che sarà presente solo se il browser la pagina è stata caricata nel ha le caratteristiche necessarie per farli funzionare.

Se usare HTML o JSON nella risposta del server è altamente soggettiva, mi ritrovo spesso fatica a scegliere tra di loro. Si potrebbe sostenere, per esempio, che la ricezione di un gruppo di coppie chiave-valore dal server e rendendoli in un elemento di selezione esistente significherebbe più codice e quindi più tempo speso codifica e più potenziali bug. Invece, si può semplicemente richiedere l'elemento di selezione pre-costruito dal server, e iniettare in un contenitore. La logica per la costruzione già l'elemento risiede sul server, perché costruire due volte, in due lingue diverse.

L'altro punto di vista è che JSON riduce al minimo l'utilizzo della larghezza di banda, quindi vale la pena di andare il miglio supplementare per analizzare alcuni JSON di costruire qualche markup sul client. Trovo facile in disaccordo con questo punto di vista, per un paio di ragioni (io sono non generalizzare, non fraintendetemi). Prima di tutto, molti, molti server web sono configurati per comprimere / sgonfiare / gzip loro produzione, e molti, molti dei browser accetta compressi contenuti. Markup è molto comprimibile, in quanto contiene navi cariche di ridondanza (<strong></strong>). È pertanto ragionevole ritenere che la dimensione di una risposta JSON non sarebbe eccessivamente piccolo di un markup risposta-con-. In secondo luogo, un grande insieme di dati potrebbe significare un tempo di esecuzione di considerevoli dimensioni sul client (brutte, cicli annidati sono all'ordine del giorno - evidente in alcune delle domande che compaiono qui)

.

Il mio consiglio è quello di cercare di capire i pregi e svantaggi di ogni approccio, e di sfruttare tali informazioni. Si potrebbe desiderare di leggere questo:

http://www.quirksmode.org/blog/archives /2005/12/the_ajax_respon.html

Altri suggerimenti

IMO, lavorando con HTML porta maggiori rischi per la sicurezza (inserimento di script MITM, ecc). Ogni volta salvato sul "duplicazione" in realtà dovrebbe essere speso per la sanificazione prima di aggiungere.

JSON può essere tranquillamente analizzata e di solito è molto più compatto, come dici tu, risparmiando banda.

Lo so che avrei scelto (JSON).

Prima di tutto, pensare attentamente se si ha realmente bisogno di supportare sia gli utenti JavaScript abilitati e non abilitati. Per i miei soldi, la cosa bella di AJAX è che separa visualizzazione (costruzione di HTML) dalle informazioni.

Detto questo, ecco un approccio che lavoro potrebbe:

  1. Scrivere un programma lato server che fa quello che le vostre esigenze di pagina da fare e restituisce la risposta (qualunque cosa ciò consiste in) nella forma più semplice possibile. Per l'uscita semplice - come solo indicare se ha funzionato o no - questo potrebbe essere solo un numero o una semplice stringa. Per qualcosa di più complicato di un semplice singolo risultato sarà probabilmente XML.

  2. Si scriva uno script lato server che chiama semplicemente il vostro programma ed emette il risultato come testo normale o XML.

  3. scrivere un altro script server-side che chiama il vostro programma e costruisce una pagina HTML da esso.

  4. Nella pagina che le chiamate di utenti di eseguire la routine, includere javascript che scrivono un controllo (tasto per esempio a), che se premuto invia una richiesta di AJAX per chiamare il primo script, quindi analizza il risultato e aggiorna la pagina di conseguenza. Includere anche un altro controllo, all'interno dei tag NOSCRIPT in modo che gli utenti che sono JS abilitati non lo vedranno, che fa un modulo standard presentare per eseguire il secondo script. Quindi è ancora necessario due script, ma la carne principale del calcolo viene fatto solo una volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top