Portál AbcLinuxu, 30. dubna 2025 20:08

Jak uložit a načíst obsah formuláře na straně klienta?

8.12.2010 11:00 | Přečteno: 1230× | Programování | poslední úprava: 8.12.2010 15:41

Dnes jsem řešil zdánlivě nezajímavou věc. Uchování obsahu formuláře, který je na webu stále vidět a jeho obsah by se neměl měnit, dokud nedojde ze strany uživatele ke změně a znovuodeslání. Zároveň je nemožné provést uložení například do SESSION, či jinak, a naplnění formuláře ze strany serveru - např. PHP - při vykreslování.

Výše uvedená fakta mne vedla k jednoznačné volbě - COOKIES. Pravda, pokud je bude mít klient zakázané, řešení je k ničemu. Bude tedy využito JS, jQuery a několik rozšíření. První rozšířením bude skript pro čtení a nastavování hodnot ve formuláři (v ukázce uloženo do samostatného souboru - jquery.formvalues.js), dále budeme potřebovat jquery.json.js a jquery.cookie.js.

A nyní je již vše jednoduché.

<script src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script src="jquery.cookie.js"></script>
<script src="jquery.json-2.2.min.js"></script>
<script src="jquery.formvalues.js"></script>
<title>Form</title>
<script>
/* <![CDATA[ */
function storeForm() {
	var date = new Date();
	date.setTime(date.getTime() + (24 * 60 * 60 * 1000)); // 24 hours
	$.cookie('cookie-form', $.compactJSON($('#form').values()), { path: '/', expires: date });
}


$(document).ready(function() {
	if($.cookie('cookie-form') != null) {
		$('#form').values($.secureEvalJSON($.cookie('cookie-form')));
	}
	
});
/* ]]> */
</script>
...
<form id="form" method="post" action="...">
	<input type="text" name="firstname" value="" /><br />
	<input type="text" name="lastname" value="" /><br />	
	<input type="submit" value="Odeslat" onclick="storeForm()" />
</form>

Není to nic extra, ale třeba to někomu pomůže.

Inspirováno komentáři - v případě využití local storage je řešení následující. Navíc bude potřeba jquery.jstorage.js a úprava:

<script src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script src="jquery.cookie.js"></script>
<script src="jquery.json-2.2.min.js"></script>
<script src="jquery.formvalues.js"></script>
<script src="jquery.jstorage.js"></script>
<title>Form</title>
<script>
/* <![CDATA[ */
function storeForm() {
	if($.jStorage.storageAvailable()) {
		$.jStorage.set('cookie-form', $('#form').values());
	} else {
		var date = new Date();
		date.setTime(date.getTime() + (24 * 60 * 60 * 1000)); // 24 hours
		$.cookie('cookie-form', $.compactJSON($('#form').values()), { path: '/', expires: date });
	}
}


$(document).ready(function() {
	if($.jStorage.storageAvailable()) {
		if($.jStorage.get('cookie-form', null) != null) {
			$('#form').values($.jStorage.get('cookie-form'));
		}
	} else {
		if($.cookie('cookie-form') != null) {
			$('#form').values($.secureEvalJSON($.cookie('cookie-form')));
		}
	}	
});
/* ]]> */
</script>
...
<form id="form" method="post" action="...">
	<input type="text" name="firstname" value="" /><br />
	<input type="text" name="lastname" value="" /><br />	
	<input type="submit" value="Odeslat" onclick="storeForm()" />
</form>

Díky za nápad na zlepšení. O local storage jsem věděl, ale omezení COOKIES mne nenapadlo. Ještě jednou díky.

       

Hodnocení: 67 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

8.12.2010 11:59 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jak uložit a načíst obsah formuláře na straně klienta?
Odpovědět | Sbalit | Link | Blokovat | Admin
Pozor na to, že množství cookies a jejich celková velikost je omezené, větší formulář by se tam nemusel vejít. Moderní prohlížeče mají různá rozšíření umožňující ukládat uživatelská data (některá i pro offline prohlížení), která mají větší kapacitu.
8.12.2010 14:13 chrono
Rozbalit Rozbalit vše Re: Jak uložit a načíst obsah formuláře na straně klienta?
Presne tak. Na toto je lepšie použiť localStorage a cookies použiť len keď prehliadač localStorage nepodporuje, alebo je to zakázané. Navyše sa tie údaje nebudú, pri localStorage, zbytočne posielať serveru.
Toman avatar 8.12.2010 15:44 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
Rozbalit Rozbalit vše Re: Jak uložit a načíst obsah formuláře na straně klienta?
Zápisek jsem doplnil o možnost local storage. Děkuji za věcné připomínky.
8.12.2010 12:54 Senior Database Programmer
Rozbalit Rozbalit vše Re: Jak uložit a načíst obsah formuláře na straně klienta?
Odpovědět | Sbalit | Link | Blokovat | Admin
To som nepochopil. Píšeš, že cookies nemôžeš použiť pretože ich user môže mať vypnuté ale v tom JavaScripte to predsa ukladáš do cookies ?! Alebo tie cookies z tej JS knižnice JQuery sú iné ako normálne cookies browsera? Nevzťahuje sa na ne zákaz ak ich má user v browsery vypnuté? Sorry, za blbé otázky, niesom web developer.
pavlix avatar 8.12.2010 13:24 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jak uložit a načíst obsah formuláře na straně klienta?
Psal, že nemůže použít SESSIONS, ne COOKIES.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
9.12.2010 20:16 zulu
Rozbalit Rozbalit vše Re: Jak uložit a načíst obsah formuláře na straně klienta?
Odpovědět | Sbalit | Link | Blokovat | Admin

Takže formulář, který je stále vidět.
A jaký smysl teda má držení hodnot jinde než v něm?

A nemůžeš ho naplnit na straně serveru.
Pokud ho nemůžeš plnit, tak ho nemůžeš ani zpracovávat, tak k čemu tam je?

Bedňa avatar 11.12.2010 14:06 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: Jak uložit a načíst obsah formuláře na straně klienta?
Odpovědět | Sbalit | Link | Blokovat | Admin
Nechápem zmysel, prečo tie dáta nemôžeš poslať cez POST?
KERNEL ULTRAS video channel >>>

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.