[ Webhosting profitux.cz ]
v6ak [ programování, bezpečnost, web, php, java, ... ] (Vít Šesták)
Buzz - v6ak Twitter - v6ak

štítky

Parsování GET vstupu v JavaScriptu

Jak se rozmáhá AJAX, narůstá potřeba práce v JavaScriptu. Někdy se může hodit získat GET parametr, případně "hash parametr" (není za otazníkem, ale za křížkem). Popíšu jednorázové získání GET parametru.

Troška teorie

Snad víte, že GET parametry jsou v adrese za otazníkem. V DOMu je můžete získat pomocí window.location.search.

Tyto parametry ve tvaru název=hodnota jsou navzájem odděleny ampersandem a jsou escapovány (k escapování se za chvilku dostanu).

Získání escapovaného parametru

Konkrétní parametr (ale escapovaný) lze získat jednoduchým regulárním výrazem (kompatibilní s Perlem a JS):

[\?\&]param\=([^\&]*)($|\&)

Místo param si pochopitelně dosaďte název parametru, který chcete získat.

Odescapování parametru

A jak se dostanu k neescapované formě? Stačí použít decodeURIComponent(String).

A teď to dáme dohromady!

Pokud nevíte, jak můžeme získávat hodnoty přes regulární výraz, nevadí. Tady je krátký skript, který by měl alertnout hodnotu parametru param nebo napsat, že nebyl poslán.

var res; if(res= /[\?\&]param\=([^\&]*)($|\&)/ .exec(location.search)){ alert('Parametr param má hodnotu:\t'+ decodeURIComponent(res[1]) ); }else{ alert('Parametr param nebyl poslán!'); };

Jak to funguje?

Regulární výraz

Je to velmi jednoduché. Na druhém řádku je v lomítkách uzavřen regulární výraz. (Ano, JavaScript ho umožňuje umístit i do lomítek.) Na něm je volána metoda exec (Javisté jí asi budou říkat RegExp.exec(String) :-)), která vrátí buď pole nebo null. Pole je vráceno v případě nalezení, null v případě nenalezení.

Proč ta zpětná lomítka?

možná si říkáte, že některá zpětná lomítka jsou v regulárním výrazu zbytečná. No asi jo, ale:

Escapovaný parametr

V if větvi zjišťuji hodnotu res[1] - escapovaný parametr. Proč je tam jednička? Protože vzorek pro text, který nás zajímá, je uzavřen v regulárním výrazu v první závorce. Že se pole číslují od nuly? To jo, ale na nulté pozici je zpracovaný text.

Neescapovaný parametr

Nakonec musíme parametr odescapovat. Na to použijeme decodeURIComponent. A je to!

K čemu je decodeURIComponent dobré? V adrese mohou být různé znaky. Některé (mezera, znaky s diakritikou, ...) tam nemohou být přímo uvedeny a je potřeba použít %hexa syntaxi. (Například %20 místo mezery.) A funkce decodeURIComponent nám to převede zpět.

Omezení

Tento způsob získávání GET parametrů je pro menší použití. Předně, pokud budete chtít získávat GET parametry častěji, jde zřejmě o časově neefektivní způsob. Navíc nepodporuje získávání polí. Ale pokud chcete například rychle zjistit jeden GET parametr, není to špatné řešení.

Diskuzi ke článku naleznete zde.

Linkování

Líbí se Vám tato stránka? Zalinkujte ji!

Chcete sledovat novinky? Pokud si právě prohlížíte článek a hledáte RSS pro celý web, pak jste trošku jinde. Možná hledáte poslední změny.

Validní HTML 4.01 StrictValidní CSS 2.0Validní hlavní RSS kanálPHP 5Apache
referer: UA:CCBot/2.0 (http://commoncrawl.org/faq/) time:0.22355200 1503523239
web
mail
comment