Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Operazione controllata onbeforeunload

    Ciao a tutti, una domanda
    sto provando in tutti i modi a controllare l'azione quando un utente esce per qualche motivo dalla pagina senza fare la procedura corretta.

    Esempio: compila il form ma non salva i dati
    Posso in qualche modo:

    - personalizzare il messaggio che appare (mi pare di aver capito di no)
    - eseguire prima un salvataggio forzato via ajax e dopo la risposta da parte di ajax solo a quel punto permettere all'utente di uscire dalla pagina?

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505
    io ti odierei se tu lo facessi

    ad ogni modo guarda qui

    https://developer.mozilla.org/it/docs/Web/Events/unload
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Grazie ciro, in realtà è a tutela dell'utente. Non si tratta di un sito ma di un applicazione e per sicurezza in caso di chiusura accidentale vorrei prevenire la perdita dei dati tutto qui,

  4. #4
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505
    Quote Originariamente inviata da sally3000 Visualizza il messaggio
    Grazie ciro, in realtà è a tutela dell'utente. Non si tratta di un sito ma di un applicazione e per sicurezza in caso di chiusura accidentale vorrei prevenire la perdita dei dati tutto qui,
    avevo inteso che era un'applicazione. ma magri non voglio finire la compilazione e rimandare....e non mi fai chiudere la pagina.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  5. #5
    Ah bhè anzi è proprio per una sicurezza loro :-D
    diciamo che è la classica situazione "contraria" ed è nel loro interesse questo salvataggio in caso di uscita "più accidentale" che "voluta" credimi

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,674
    Ciao, secondo me più che salvare i dati prima della chiusura, potresti eseguire un auto salvataggio ogni tot secondi (ad esempio 30 secondi), e più che inviarli tramite Ajax, potresti immagazzinarli temporaneamente su un oggetto localStorage.

    Tieni presente infatti che l'utilizzo di Ajax dipende comunque dalla presenza di una connessione internet attiva. Metti il caso che per un qualche motivo non sia disponibile la connessione; l'utente compila il form e chiude la pagina; in tal caso che fai? lanci la chiamata Ajax in attesa di una risposta che, se non avviene, bloccherà la chiusura della pagina? Oppure avverti l'utente che manca la connessione (una cosa che dovresti comunque gestire) e quindi se chiude la pagina perderà comunque i dati inseriti sul form?

    Il localStorage, impostato opportunamente, dovrebbe risolvere il problema. L'avviso alla chiusura della pagina, se sono stati inseriti dei dati, potrebbe comunque starci.

    In linea di massima è quello che avviene con l'editor messaggi di questo forum. Se provi a scrivere qualcosa e attendi una 30na di secondi, vedrai un'etichetta gialla che appare nell'angola in basso a destra, e riporta l'indicazione "Auto-saved" (perlomeno con l'editor e le impostazioni di default).
    A quel punto, se chiudi la pagina, salterà fuori la finestra modale col solito messaggio di avvertimento per confermare l'abbandono. Ma se decidi di abbandonare, e poi rientri sulla stessa pagina, l'editor avrà un bottoncino "Restore Auto-saved content" in basso a sinistra, che, se pigiato, andrà a inserire nuovamente il testo che avevi scritto (e che è stato salvato automaticamente) prima di abbandonare la pagina (questo, quando i criceti non fanno i capricci).

    Chiaramente è giusto un'idea, poi vedi tu.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Si diciamo KillerWorm che l'idea è proprio questa

    in pratica per ottimizzare il sistema viene caricato il "grosso" (file css e javascript) nella pagina html
    poi avviene una chiamata ajax che recupera i dati per compilare i vari form
    solo che i dati di ogni form li invio al server tramite ajax per evitare di ricaricare la pagina e perdere "tempo" nel reload

    avevo inizialmente pensato a fare il localstorage dei vari form e salvarli tutti assieme con il tasto "FINE" ma il rischio è appunto che la pagina viene chiusa prima

    volevo evitare di fare le chiamate ogni 30 secondi però è anche vero che se li ho nel localstorage in pratica non vengono salvati finchè non viene eseguita un operazione verso il server.

    giusto?

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,674
    Certo, ma una questione è l'invio vero è proprio dei dati del form (o dei vari form) che, senza dubbio, può essere fatto tramite Ajax, l'altra questione è il semplice ripristino momentaneo dei dati sul form, nel caso in cui avvenga l'accidentale chiusura della pagina, il quale è più funzionale (a mio parere) se gestito tramite localstorage.

    avevo inizialmente pensato a fare il localstorage dei vari form e salvarli tutti assieme con il tasto "FINE" ma il rischio è appunto che la pagina viene chiusa prima
    A prescindere dal problema di chiusura della pagina, mi pare di capire che l'intenzione è anche quella di passare i dati da un form all'altro per auto-compilare i form stessi man mano che si procede. In ogni caso, il rischio di perdita dei dati, non c'è comunque se li memorizzi, appunto, tramite localstorage. Nel senso che quei dati, impostando opportunamente tutto l'ambaradan, saranno salvati (chiaramente lato client) finché magari non si arriva a premere il tasto "FINE". Certo, è ovvio che se l'utente chiude la pagina e svuota la cache, quei dati saranno persi; ma in tal caso è presumibile che l'abbandono della pagina non fosse più così accidentale.

    volevo evitare di fare le chiamate ogni 30 secondi però è anche vero che se li ho nel localstorage in pratica non vengono salvati finchè non viene eseguita un operazione verso il server.
    Se per "chiamata" intendi una chiamata Ajax, non è questa che dovrai fare ogni 30 secondi. Io mi riferivo sempre a localstorage; in tal caso non parliamo strettamente di "chiamata" come se fosse un passaggio di dati client-server-client, ma avverrà una semplice e rapida memorizzazione su un oggetto locale; certo i dati non saranno salvati su server finché non avverrà l'invio vero e proprio.
    Probabilmente anche qui andrebbe eseguita una opportuna gestione degli errori, ma non devi attendere una risposta dal server; l'operazione dovrebbe risultare immediata o quantomeno più rapida e meno problematica rispetto ad una chiamata Ajax.

    Non so poi se sia possibile adoperare il sistema localstorage sull'onbeforeunload. Nel caso fosse possibile, se preferisci non innescare l'auto-saved ogni tot secondi, potresti farlo giusto su quell'evento e "garantire" un eventuale ripristino dei dati che erano già stati inseriti, perlomeno finché non si arriva al completamento dell'operazione di compilazione.

    Magari fai qualche prova, o attendi eventuali altre risposte.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  9. #9
    L'obiettivo è stressare il meno possibile sia il server che il client visto che l'obiettivo e far svolgere le medesime operazioni contemporaneamente con un numero cospicuo di utenti (si stima che l'obiettivo sarà circa di circa 200-300 utenti contemporanei)

    La prima versione del software procedeva con il recupero della form ed il relativo salvataggio della form precedente con una chiamata ajax ma abbiamo notato che questa operazione talvolta non dava risultanti performanti dal punto di vista della velocità

    vuoi per colpa della connessione o altre cause quindi l'obbiettivo è diminuire le chiamate al server ma senza necessariamente sovraccaricare il browser.

    L'ideal del localstorage mi sembra interessante e proverò questa soluzione.
    grazie per la dritta

  10. #10
    Pare che localstorage sia proprio quello che fa al caso mio, però ho una domanda
    c'è modo che l'utente "disattivi" in qualche modo la funzione "localstorage"? Per esempio con la navigazione in incognito del browser?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.