Autor Zpráva
matthew
Profil
function include(url)
{
  if (window.ActiveXObject)
  {
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    httpRequest = new XMLHttpRequest();
  }

  httpRequest.open("GET", url, true);
  httpRequest.onreadystatechange = function () {return httpRequest.responseText;} ;
  httpRequest.send(null);
}

promenna = include("info.php?id=1");
document.write(promenna);


Javascirpt vypíše pouze "undefined", a přitom by měl vypsat obsah souboru info.php. Co dělám špatně?
Chamurappi
Profil
Reaguji na matthewa:
function () {return httpRequest.responseText;}
Zdejší return přísluší jen této jednořádkové funkci, neovlivňuje návratovou hodnotu celého include.

Uvědom si, že HTTP komunikace chvíli trvá, soubor se nenačte okamžitě, nečeká se na něj, tvůj skript běží dál a include nevrátí nic. Až za nějakou dobu se data stáhnou a vyvolá se událost onreadystatechange — a teprve v ní můžeš se staženými daty něco dělat. Nemůžeš ale použít document.write, protože zbytek HTML dokumentu už může být v tu chvíli dávno načtený a zpracovaný. Můžeš ale nastavit vlastnost innerHTML nějakému existujícímu elementu (zaměřenému třeba pomocí document.getElementById(…)).
peta
Profil
Jinymi slovy, vola se casovac a az skonci, pak je v promenne hodnota. Je to podobne, jako bys napsal:

promenna = 1;
setTimeout("promenna = 99", 30);
document.write(promenna);

Pokud chces s tou promennou neco delat, tak vsechny priklady na ajax tam maji funci uvnitr.

function () {return httpRequest.responseText;} ;
to je sice krasne, ale nehlidas is stav prenosu, ktery muze byt 1-4 a vyslednou hodnotu, zda se prenos zdaril nebo ne.

Navic
aaa.neco = function () {return 111;}
vraci hodnotu do
bbb = aaa.neco();
alert(bbb)
takze bys musel napsat:
promenna = include("info.php?id=1");
document.write(promenna.onreadystatechange());
Jenze to ti nemusi fungovat diky casovemu zpozdeni a proto, ze tu promennou vyuziva uz ajax pro stavy 1-4

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: