Realizzare moduli semplici nelle applicazioni web [chiuso]

2

Come lavori con i moduli nelle tue applicazioni web?

Non sto parlando di applicazioni RESTful, non voglio costruire front-end pesanti usando framework come Backbone.

Ad esempio, ho bisogno di aggiungere il modulo "contattaci". Devo controllare i dati che sono stati compilati dall'utente e dirgli che i suoi dati sono stati inviati. Requisiti:

  • Voglio usare AJAX.
  • Voglio convalidare il modulo sul lato back-end e non voglio duplicare lo stesso codice sul lato front-end.

Ho la mia soluzione, ma non mi soddisfa. Faccio una richiesta AJAX con dati serializzati sul modulo di invio e ricevo risposta. Il prossimo sta controllando l'intestazione "Content-type".

  • html - > Significa che esistono errori con il modulo di riempimento e che la risposta HTML è sotto forma di etichette di errore. - > Sostituirò il mio modulo con risposta html.
  • json e response.error_code == 0 - > Significa che il modulo è stato inviato correttamente. - > Mostrerò all'utente la notifica del successo.
  • json e response.error_code! = 0 - > Si è verificato un problema nel back-end (come la connessione al database).
  • altro : visualizzo il seguente messaggio:

We have been notified and have started to work with that problem. Please, try it later.

Il problema è che non posso usarlo con i moduli che caricano il file.

Qual è la tua pratica? Quali librerie e principi usi?

    
posta levalex 12.10.2012 - 21:09
fonte

4 risposte

2

Per la mia app per hobby, sto utilizzando Java con il framework di convalida dell'oggetto noto come JSR-303. Ecco il link alla mia risposta ad un domanda simile su SO, ma specifica per quella configurazione.

Panoramica:

  1. Quando si fa clic sul pulsante Invia, raccolgo i dati del modulo e li invio tramite AJAX GET al mio validatore sul lato server.
  2. La convalida avviene dietro le quinte e il server estrae tutti i messaggi di errore dalla risposta di convalida, li impacchetta e li rimanda al client come JSON.
  3. Quando viene visualizzata una risposta di convalida dell'errore al client, applico e / o cancello lo stile degli errori dai campi modulo appropriati.
  4. Quando una risposta di convalida di successo viene presentata al cliente, eseguo il modulo normale di invio. A un certo punto lo cambierò per reinviare come AJAX.

Devo aggiornare il codice alla risposta collegata, ma questo è il succo di ciò.

    
risposta data 12.10.2012 - 21:41
fonte
1

Prima di tutto, devi assicurarti che l'invio del modulo funzioni senza AJAX . Un sacco di persone navigano nel web con Javascript disabilitato, rendendo inutile qualsiasi richiesta AJAX (non funzioneranno).

Quindi, quando sei soddisfatto dell'invio e della convalida del tuo modulo, puoi iniziare ad aggiungere cose fantasiose come AJAX. jQuery ( tra altri ) è una libreria fantastica che rende molto facile scrivere javascript cross-browser compatibile. Potresti volerlo esaminare poiché supporta AJAX e lo rende molto facile da usare con .

Quello che hai definito come il tuo attuale meccanismo sembra essere ok. Forse puoi spiegare cosa non ti piace a riguardo?

    
risposta data 12.10.2012 - 21:36
fonte
0

Non l'ho mai provato ma ho sentito di haxe che ti permette di scrivere codice generato da js e funziona sul server link ma presumo che non sia molto buono perché non ho mai sentito di siti costruiti con haxe

Si genera in php java e in altre lingue link

    
risposta data 12.10.2012 - 22:29
fonte
0

Il tuo processo non mi sembra un problema e abbiamo elaborato molti moduli.

Usiamo una libreria Form personalizzata per il nostro sistema su misura che funziona molto bene per le semplici applicazioni dei moduli. Devi stare attento anche se qualcosa del genere può diventare rapidamente restrittivo (e aggirato) da una prospettiva di design.

La nostra applicazione funziona in gran parte come la tua, in quanto postiamo il modulo e sostituiamo nuovamente il modulo nell'interfaccia utente, ma inviamo una risposta xml standardizzata, che viene elaborata da una libreria jQuery generica, parte della risposta è la sostituzione HTML.

Il back-end è basato su oggetti, quindi aggiungiamo controlli a un oggetto Form e regole di convalida ai controlli. Questo ci offre un modo molto strutturato per gestire i postback e creare moduli con convalida. La nostra convalida del cliente è costruita esattamente con le stesse regole che inseriamo nei nostri controlli del modulo. Sul lato server tutta la (più) elaborazione dei moduli viene gestita esattamente nello stesso modo standardizzato solido.

controlla postback - > visualizza il modulo pubblicato - > verifica convalida - > processo

Non abbiamo la libreria creata come output di un blocco (abbiamo già fatto questo errore), è troppo restrittiva dal punto di vista del design, in base a ciò significa che non ha form->Render() output un intero forma, piuttosto avere form->getControl('firstname')->Render() in modo da poter facilmente integrarsi con qualsiasi front end richiesto con interfaccia personalizzata tra tutti gli elementi del modulo, quindi abbiamo anche macro che possiamo usare nel nostro sistema di template per rendere la prototipazione più veloce: {frm1[firstname]}

Abbiamo standardizzato il formato di risposta e il meccanismo di richiesta, questo significa che abbiamo una libreria javascript per tutti i nostri scopi , non abbiamo JavaScript in linea per l'elaborazione dei moduli tutto è generico.

Tuttavia, i progettisti odiano il fatto che non possano vedere i moduli generati dalla biblioteca nei loro strumenti di progettazione HTML. Le macro aiutano con questo dato che sono almeno visibili come segnaposto.

Gestiamo i campi di caricamento dei file in un iframe. Dà l'impressione che si stia verificando un post del file Ajax, anche se non lo è. Ricorda che, purché tu non sia di dominio incrociato, puoi utilizzare JavaScript per comunicare tra genitore e iframe.

EDIT Vale la pena ricordare che tutti i moduli sono moduli HTML validi, sono migliorati da Javascript quando è disponibile, anche in questo caso la libreria è standardizzata.

    
risposta data 13.10.2012 - 21:36
fonte

Leggi altre domande sui tag