Autor Zpráva
JardaB
Profil
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
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
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
Radek9:

Funguje. Děkuji za rady a připomínky...

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0