Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774

    salvare stato applicazione ajax

    ciao a tutti,
    ho scritto un applicazione web 2.0 che fa interamente uso di chiamate ajax.
    L'applicazione si compone di 5 plugin JQuery messi in fila come in una sorta di wizard,
    per cui da ciascun plugin l'utente può decidere se passare al successivo o tornare al precedente per modificare i dati inseriti.

    Devo anche fare in modo che se l'utente refresha la pagina (oppure muove avanti-indietro) i plugins vengano ricaricati esattamente così come l'utente li ha lasciati.
    Ho quindi bisogno di un meccanismo per mantenere lo stato dei plugins.

    Per far questo ho creato un oggetto JSON dentro ogni plugin che contiene i dati di stato del plugin stesso.
    Ogni volta che viene invocato un nuovo plugin, oppure all'evento "onbodyonload", le configurazioni del plugin corrente vengono serializzate e scritte dentro una textarea nascosta.

    In questo modo quando un utente fa un passo indietro o refresha riesco a recuperare lo stato del plugin precedente e a ricaricarlo correttamente.

    Il tutto funziona in IE e Firefox ma non su Chrome e Safari (in generale quindi su tutti i browser webkit).

    Questo perchè dopo il refresh la textarea, anzichè mantenere (come dovrebbe) i dati, risulta essere vuota!

    Qualcuno di voi sa dirmi se è normale che questi browser si comportino in questo modo?
    Come posso fare a risolvere il mio problema?

    Grazie mille a tutti in anticipo
    Saluti
    Citruz

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Non puoi contare su una textarea per salvarti dei dati. Usa localSorage o, meglio, se ho capito bene quello che ti serve, sessionStorage.

    Qui hai un'infarinatura: http://www.quirksmode.org/blog/archi...storage_t.html

  3. #3
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ciao,
    ho letto l'articolo che mi hai proposto, è molto interessante ma le sessionStorage non sono supportate da Chrome, ed è proprio su questo browser (insieme a Safari) che ho problemi.
    Con IE e FF riesco a lavorare benissimo con le textarea.

    Qualcuno ha idea di come possa mantenere dei dati su Chrome e Safari anche dopo il refresh della pagina?

    Tenete presente che preferirei evitare di mandare i dati sul server (database) per poi recuperarli dopo pochi secondi (anche perchè ho strutture JSON da mantenere che in alcuni casi superano il MB).

    Grazie a tutti
    Citrus

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da citrus
    ciao,
    ho letto l'articolo che mi hai proposto, è molto interessante ma le sessionStorage non sono supportate da Chrome, ed è proprio su questo browser (insieme a Safari) che ho problemi.
    Con IE e FF riesco a lavorare benissimo con le textarea.

    Qualcuno ha idea di come possa mantenere dei dati su Chrome e Safari anche dopo il refresh della pagina?

    Tenete presente che preferirei evitare di mandare i dati sul server (database) per poi recuperarli dopo pochi secondi (anche perchè ho strutture JSON da mantenere che in alcuni casi superano il MB).

    Grazie a tutti
    Citrus
    Funziona benissimo su Chrome e Safari, ma la pagina dev'essere online, altrimenti non funzionerà!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    utilizza i cookie e ti risparmi anche la scrittura nella textarea, soluzione che sinceramente trovo orrenda, ma è solo un mio parere ovviamente.

  6. #6
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da Vindav
    utilizza i cookie e ti risparmi anche la scrittura nella textarea, soluzione che sinceramente trovo orrenda, ma è solo un mio parere ovviamente.
    Tra l'altro&hellip; è una soluzione vecchia quanto il cucco quindi è supportata da tutti i browsers. Tieni presente però che, a differenza degli oggetti Storage, la quantità massima di dati che potrai salvare nei cookie è limitata a qualche byte, a stento kilobytes (dipende dai server), superati i quali verrà generato un errore da parte del server: i cookie salvati nel browser infatti vengono inviati al server a ogni pagina visitata. Quindi, anche se non arrivi ad accumulare tanti dati da generare errore, comunque ti si rallenterà la navigazione. Non c'è paragone con gli oggetti Storage insomma. Tieni presente però che l'oggetto Storage non è supportato da IE <= 8.0.

    P.S. Anche i cookie su Chrome e Safari li dovrai testare online, offline non ti funzioneranno!!

  7. #7
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    scusate... ma ho scritto chiaramente che ho strutture JSON che superano il MB da salvare...
    ai cookie ci avevo già pensato anche io ma il limite di 4Kb li rende inutilizzabili per i miei scopi.

    Non capisco perchè troviate orrenda la soluzione delle textarea, possono contenere grandi quantità di dati e i maggiori browser mantengono i dati in esse anche dopo il refresh (solo i browser webkit per qualche motivo non li mantengono).
    In attesa di un supporto decente per html5 non vedo molte altre soluzioni,

    a meno che non abbiate una voi da proporre, che è poi il motivo per cui ho aperto
    la discussione.

    grazie
    citrus

  8. #8
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da citrus
    scusate... ma ho scritto chiaramente che ho strutture JSON che superano il MB da salvare...
    ai cookie ci avevo già pensato anche io ma il limite di 4Kb li rende inutilizzabili per i miei scopi.

    Non capisco perchè troviate orrenda la soluzione delle textarea, possono contenere grandi quantità di dati e i maggiori browser mantengono i dati in esse anche dopo il refresh (solo i browser webkit per qualche motivo non li mantengono).
    In attesa di un supporto decente per html5 non vedo molte altre soluzioni,

    a meno che non abbiate una voi da proporre, che è poi il motivo per cui ho aperto
    la discussione.

    grazie
    citrus
    È una soluzione orrenda perché inaffidabile e non conforme. Firefox ad esempio spesso mantiene il contenuto di una textarea dopo il refresh, ma non sempre. Dopo un errore js può capitare che lo cancelli. Poi non non tutti i browser si comportano allo stesso modo. Il motivo è semplice: la textarea non è fatta per memorizzare dati. È stato inventato un oggetto apposta, senza limiti di spazio, che si chiama Storage ed è uno standard.

    https://developer.mozilla.org/en/dom/storage


  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    per la textarea la risposta te l'ha già data carlo e la condivido in pieno, stai utilizzando un linguaggio server side? si? allora utilizza le sessioni(quindi nessun database) servono proprio a questo. La sessione puoi gestirla direttamente nella pagina.

    Altrimenti credo che l'unica soluzione sia quella proposta da carlo.

  10. #10
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ma come si fa a consigliare di mettere 2MB di dati in sessione lato server?
    E' assurdo tanto quanto lo è pensare di salvarli in un cookie.
    ancora continui a non considerare le quantità.

    l'applicazione di cui parliamo (che è web 2 e quindi totalmente ajax-based) ospita centinaia/migliaia (nelle ore di punta) di utenti al giorno, se metto 2MB di dati in sessione per ogni utente dopo 10 minuti il server stramazza per terra...

    non ho certo scelto la soluzione delle textarea per divertimento, ma per ovviare a una mancanza dei browser (che sarà colmata con html5 ma ce ne vuole ragazzi prima che tutti i browser si adeguino, è una croce lavorare cross-browser!).

    anche il salvarle sul database non mi entusiasma (è davvero l'ultima spiaggia) perchè dovrei spostare nel database MB di dati per poi rileggerli dopo pochi secondi (al reload della pagina), occupando banda inutilmente (nonostante la compressione http riduca molto il peso dei dati) e creando attese al client.

    La soluzione della sessionStorage mi piace, l'ho già implementata, ma funziona solo Chrome, mentre per Explorer (8) ho questo errore:
    codice:
    sessionStorage è nullo o non è un oggetto
    e su firefox 5.0 invece:
    codice:
    Errore: uncaught exception: [Exception... "Operation is not supported"  code: "9" nsresult: "0x80530009 (NS_ERROR_DOM_NOT_SUPPORTED_ERR)"]
    Anche su Safari 5.0 non funziona, sia in locale che online.

    Quello che sto chiedendo è se qualcuno gentilmente conosce (o gli è già capitato di usare) un meccanismo che risolva il problema del mantenimento dei dati sul browser, che sopratuttto sia cross-browser.

    grazie
    citrus

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 © 2025 vBulletin Solutions, Inc. All rights reserved.