Autor | Zpráva | ||
---|---|---|---|
matthew Profil |
#1 · Zasláno: 29. 10. 2008, 12:21:36
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 |
#2 · Zasláno: 29. 10. 2008, 12:55:29
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 |
#3 · Zasláno: 29. 10. 2008, 15:58:32 · Upravil/a: peta
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 |
||
Časová prodleva: 15 let
|
0