Autor Zpráva
vuuul
Profil
Zdravím,

Pokouším se pomocí AJAXu deklarovat proměnnou a po načtení stránky jí funkcí kontrola nechat "vyplivnout" jako alert. Skript mi však nechce fungovat a nemohu najít chybu. Funkce nacti() je převzata přímo zde z diskuze. Odkaz na živou stránku zde
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base target="_blank">
<title>Francie</title>
<link rel="stylesheet" type="text/css" href="miska.css">

<script>
function nacti(url, callback)
{
  var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : 

new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.onreadystatechange = function()
  {
    if(xhr.readyState == 4)
      callback(xhr.responseText);
  };
  xhr.send("");
}

nacti("data.txt", function(data)
{
  promenna = data;
})

function kontrola()
{
alert(promenna)
}

window.onload= kontrola;
</script>
</head>
<body>
</body>
</html>

Předem díky za radu
yFang
Profil
vuuul:
Funkce kontrola nezná proměnnou promenna, musíš jí definovat mimo funkci. Např.:
var promena;
nacti("data.txt", function(data)
{
  promenna = data;
})
 
function kontrola()
{
alert(promenna);
}
Jinak se s ní pracuje jako s lokální proměnnou ve funkci nacti, která zaninke po skončení funkce.
_es
Profil
yFang:
Funkce kontrola nezná proměnnou promenna, musíš jí definovat mimo funkci.
Jinak se s ní pracuje jako s lokální proměnnou ve funkci nacti, která zaninke po skončení funkce.
Nie je to pravda, ide o vlastnosť globálneho objektu - podobný globálnej premennej: Časté potíže, zajímavosti a poučné debaty » Používejte var

vuuul:
Odkaz na živou stránku zde
Prečo dávaš do živej ukážky iný kód ako do príspevku v diskusii?
Udalosť onload môže nastať ešte pred prijatím dát zo servera z AJAXového dotazu.
vuuul
Profil
_es:
Jestli se nepletu, tak jediny rozdil je ve jmene promenne.
Jak by se dala pojistit ta udalost onload?
_es
Profil
vuuul:
Jak by se dala pojistit ta udalost onload?
Prečo tú udalosť vôbec používaš? Prečo nezistíš, čo vrátil server vtedy, keď nastane udalosť s tým spojená? Teda vo funkcii priradenej do xhr.onreadystatechange, respektíve vo funkcii predanej ako druhý argument do funkcie nacti?
vuuul
Profil
_es S ajaxem bohužel neumím, takže jsem se snažil raději pracovat už se samotným výstupem funkce nacti(), což se ukázalo jako špatná metoda. Asi se budu muset zkusit porozumět funkci nacti()
_es
Profil
vuuul:
Prečo nezistíš vrátené dáta v riadku 26?
vuuul
Profil
_es:
Koukám, že jsem to až moc ořezal, potřebuju totiž, aby funkce kontrola() proběhla každou vteřinu, takže původně tam bylo ještě setTimeout("kontrola()",1000)

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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