Autor | Zpráva | ||
---|---|---|---|
JardaB Profil |
#1 · Zasláno: 24. 9. 2018, 10:22:24
Zdravím,
netuším, proč mi nefunguje následující: function getCookie(nazevKukiny) { kukiny = document.cookie.split(";"); html = ""; hodnota="neexistuje"; for (i in kukiny){ // procházím pole kukin jednaKukina = kukiny[i].split("="); html += jednaKukina[1]+"<br>"; if (jednaKukina[0] == nazevKukiny) {hodnota=jednaKukina[1];} } return hodnota; } Když si dám vypsat vše, tak tam jsou. Stejně tak když dám vypsat proměnnou html, která načítá hodnoty tak tam jsou také. Když ale zavolám funkci s jakýmkoliv názvem existující cookie, tak mám vráceno neexistuje |
||
Radek9 Profil |
#2 · Zasláno: 24. 9. 2018, 10:39:22
JardaB:
Cookies totiž bývají oddělené nejen středníkem, ale i mezerou (možná i jiným bílým znakem). Obecně je vhodné je tedy splitnout taktko: document.cookie.split(/;\s*/) Taktéž doporučuji proměnné deklarovat pomocí var , takhle si akorát zaneřádíš globální objekt. Stejně tak není vhodné procházet kolekci pomocí for...in cyklu.
function getCookie(name) { var cookies = document.cookie.split(/;\s*/); for (var i = 0; i < cookies.length; ++i) { var cookie = cookies[i].split('='); if (cookie[0] === name) return cookie[1]; // při shodě vrátíme hodnotu cookie } // pokud se cookie nenajde, vrátí se defaultně undefined } |
||
Joker Profil |
#3 · Zasláno: 24. 9. 2018, 10:40:12
JardaB:
V tom případě musí být problém s podmínkou jednaKukina[0] == nazevKukiny .
A ten problém je, že podle RFC mají cookies být oddělené středníkem a mezerou, přičemž tam mohou být ještě další bílé znaky (více informací (anglicky) Document.cookie - Web APIs | MDN ), takže jednaKukina[0] skutečně není přesně název cookie. jednaKukina[0].trim() by mělo dát správný výsledek. |
||
JardaB Profil |
#4 · Zasláno: 24. 9. 2018, 10:47:16
Radek9:
Funguje. Děkuji za rady a připomínky... |
||
Časová prodleva: 6 let
|
0