Autor | Zpráva | ||
---|---|---|---|
Martin Tiršel Profil |
#1 · Zasláno: 30. 7. 2008, 15:57:02
Zdravim,
s JS robim len par dni, takze som este nestihol vsetko pochytat, ale mam jeden problem s ktorym si neviem rady. Mam objekt, ktory ma za ulohu spracovavat okrem ineho httprequest poziadavky na server, co funguje, ale nefunguje uz spracovanie odpovedi, lepsie povedane je readystate stale 0. Takto nejako vyzera kod: function initialise() { var myPage = new ajaxObject(); ... myPage.doAction(); } function ajaxObject() { ... function doAction() { this.httpRequest = new XMLHttpRequest(); ... this.httpRequest.onreadystatechange = alert (this.httpRequest.readyState); } } Kod je kvoli prehladnosti znacne osekany, ale to podstatne je tu. Alert je zavolany 2x, avsak v oboch pripadoch je hodnota 0, pricom serverlogy ukazu 2 dotazy so statusom 200. Pokial ma niekto viete nakopnut, budem vdacny |
||
Chamurappi Profil |
#2 · Zasláno: 30. 7. 2008, 16:03:18
Reaguji na Martina Tiršela:
Přiřazuješ do ovladače události „this.httpRequest.onreadystatechange“ výslednou hodnotu metody alert. Tou je undefined. Takže na událost onreadystatechange nijak nereaguješ. Potřebuješ k události přiřadit přímo nějakou funkci. this.httpRequest.onreadystatechange = function() { alert (this.httpRequest.readyState); } |
||
Martin Tiršel Profil |
#3 · Zasláno: 30. 7. 2008, 16:10:47
Chamurappi
Prave tymto sposobom to nefunguje, pretoze this je povazovane za sucast objektu httpRequest a nie objektu ajaxObject. Alert som tam dal len na skratenie, v skutocnosti som tam mal this.httpRequest.onreadystatechange = this.handleRequest(); a ta sa chovala rovnako ako dany alert - metoda sa korektne zavolala (overene alertom v danej metode - cize nie priradenie ale pointer na funkciu?). |
||
Martin Tiršel Profil |
#4 · Zasláno: 30. 7. 2008, 16:16:18
Beriem spat, uz mi to doslo...
Ako teda tento problem nejako rozumne vyriesit, da sa to vobec? |
||
Chamurappi Profil |
#5 · Zasláno: 30. 7. 2008, 16:20:40 · Upravil/a: Chamurappi
Reaguji na Martin Tiršela:
Máš nějaký opravdu hodně závažný důvod nedat sem odkaz na živou ukázku problému? „v skutocnosti som tam mal this.httpRequest.onreadystatechange = this.handleRequest();“ Opět tedy přiřazuješ výsledek funkce, která se vykoná v okamžiku tohoto přiřazení, a nikoliv funkci samotnou. Jestli mi na tohle řekneš, že jsi svůj kód opět jen nechtěně zkreslil a že ve svém kompletním tajném kódu ty závorky „()“ nemáš, tak tě nechám sežrat naším dvorním lidožroutem. ——— Dodatek: „Ako teda tento problem nejako rozumne vyriesit, da sa to vobec?“ Dokážeš-li smazat ty závorky, tak dá. |
||
Martin Tiršel Profil |
#6 · Zasláno: 30. 7. 2008, 19:14:25
Chamurappi
Bohuzial to verejne spristupnit nemozem, som zazmluvneny :) Mimochodom by to nic neriesilo, pretoze tam je stara verzia JavaScriptu, ktora sa postupne zacala nabalovat tak, ze som bol nuteny si vytvorit nieco lepsie fungujuce a toto bol prvy problem, na ktory som narazil. Hej, to priradenie som si potom uvedomil, ved som ten post zobral spat :) Kod som sem napisal len pre ilustraciu principu, ako s tym pracujem. Ak by si sem poslal nejaku peknu ludozrutku, kludne sa zozrat necham :D Ale po troche googlenia a analyzovani frameworkov som natrafil na sikovnu vec: var tentoobjekt = this; Takze ked namiesto this pouzijem tentoobjekt, tak uz vsetko funguje ako ma a neodkazujem sa na xmlhttprequest objekt. |
||
peta Profil |
#7 · Zasláno: 1. 8. 2008, 08:26:53 · Upravil/a: peta
Martin Tiršel
'Bohuzial to verejne spristupnit nemozem' V tom pripade bych povazoval problem za neresitelny, tudiz vyreseny a nemas zac :) Bud chces poradit a vyrobis treba jednoduchy priklad, jakych je na webu kolem ajaxu tisice, stacilo hledat, nebo proste muzeme sazet do loterie, kde presne mas asi chybu. Mam tu takovy pokus, ale nevim, v jake fazi to skoncilo, zda to funguje. var req = null; try {req = new XMLHttpRequest();} catch (e) {req = null;} req.onreadystatechange = function() { // alert(req.readyState) if (req.readyState==4) { // if (req.status==200) {func(req.responseText);} else {alert(req.status+": "+req.statusText);} //POST server if (window[func]!=null) {window[func](req.responseText);} //string // if (ajax.func) {ajax.func(req.responseXML);} //XML } } Mno, this odkazuje na aktualni objekt. pokud napises aaa = function () {this.neco tak se dostavas do aaa |
||
Časová prodleva: 16 let
|
0