andrisp Posted September 18, 2006 Report Posted September 18, 2006 Šodien mēģinu ielauzties "objektorientētā" javascript programmēšanā; cenšos izveidot ļoti vienkāršu Ajax klasi, izmantojot Mozilla Developer Center tutoriāli (http://developer.mozilla.org/en/docs/AJAX:Getting_Started), bet nekādi nesanāk. Šeit ir kods. Problēma ir 44 rindiņā. FF konsole saka "this.fetch is not a function", kautgan kā jau kodā var redzēt, ka ir gan (typeof this.fetch atgriež function) Mēģināju izveidot kautko vienkāršāku, bet līdzīgu tam kodam, un tas strādā: function x() { this.z = 'test'; this.y = function() { this.show(); } this.show = function() { alert(this.z); } } x = new x(); x.y();
Delfins Posted September 18, 2006 Report Posted September 18, 2006 ieliec fetch() deklarāciju augstāk par makeRequest... visticamāk kaut kas tiek iekavēts
andrisp Posted September 18, 2006 Author Report Posted September 18, 2006 izmēģināju - nekā, tas pats
Delfins Posted September 18, 2006 Report Posted September 18, 2006 (edited) vnk sanāk tā, ka http_request ir cits objekts, kuram nav tā f-ja fetch, jo this norāda uz XHTTPRequest nevis uz tavu klases instanci. Un vispār onreadystatevchange tiek izsaukta kā "statiskā" f-ja, kurai nav ne owners, ne propertijs (izdrukā alert(this); ) Edited September 18, 2006 by Delfins
andrisp Posted September 18, 2006 Author Report Posted September 18, 2006 Tā jau likās. Es pārakstīju savādāk, bet vienalga nestrādā. Esmu apjucis. http://paste.php.lv/4434 Šoreiz tiek izsaukta fetch fja, bet toties no tās funkcijas es netieku klāt http_request objektam.
Delfins Posted September 18, 2006 Report Posted September 18, 2006 (edited) Nu problēmu var atrisināt caur globālo mainīgu, diemžēl vairs nevaru atrast piemēru, man forumā bija examples ar multi-request ATRADU: http://85.115.122.95/tests/ajax/ Edited September 18, 2006 by Delfins
andrisp Posted September 18, 2006 Author Report Posted September 18, 2006 Es tieši gribēju iztikt bez globāliem mainīgajiem, bet nu papētīšu tavu doto kodu
Delfins Posted September 18, 2006 Report Posted September 18, 2006 man ir bez globālajiem.. Ja neesi stiprs OOP/JS, labāk nelien pagaidām tur.
andrisp Posted September 18, 2006 Author Report Posted September 18, 2006 (edited) nu nebūs tik traki :) UPD: Izpētīju tavu kodu, nebija tik traki. Jāsaka - viltīgs piegājiens. Edited September 18, 2006 by andrisp
Delfins Posted September 19, 2006 Report Posted September 19, 2006 Programmēšana ir netikai darbs, bet arī māksla. Ja nesaproti mākslu, tad nekas tur labs nesanāks.
andrisp Posted September 19, 2006 Author Report Posted September 19, 2006 Labāk netaisīt browseru pārbaudi ar document.all, jo Opera arī atbalsta to. Labāk šādi: if (window.XMLHttpRequest) { xmlDoc = new XMLHttpRequest(); if (xmlDoc.overrideMimeType) { xmlDoc.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { xmlDoc = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } }
bubu Posted September 19, 2006 Report Posted September 19, 2006 Bez šaubām, ka nevajg detektēt browseri, bet vajag mēģināt taisīt to XHR objektu. Un ja nesanāk, tad taisīt savādākā veidā. http://php.lv/f/index.php?s=&showtopic...ost&p=20172
andrisp Posted September 19, 2006 Author Report Posted September 19, 2006 Vēl var iztikt arī bez eval izmantošanas. Pietiek, ja sendRPC fjai callback fju nosaukumus nosūta bez pēdiņām (tātad kā references laikam), un pēc tam vienkārši izsauc callbackFunc(xmlDoc); To gan netestēju kārtīgi, bet izskatās, ka jaunākās FF, IE un Opera versijas atbalsta to.
Delfins Posted September 19, 2006 Report Posted September 19, 2006 var arī ar referencēm, tas nemaina būtību. It is just an example.
andrisp Posted September 19, 2006 Author Report Posted September 19, 2006 Ar pašu ajax pieprasījumu esmu ticis skaidrībā, bet tagad nekādīgi nespēju izdomāt, kā lai norealizē, kad forma tiek submitēta (cenšos izveidot formu validāciju), tad tiek izsaukta speciāla funkcija (piem., check_form();, tai padodot referenci uz formu), kas izveido ajax pieprasījumu un pēc ajax rezultāta atgriešanas pārbauda, vai vajadzīgās pārbaudes ir veiksmīgas. Problēmas: 1. Kā lai apstādina check_form() funkcijas izpildi kamēr nav atgriezts rezultāts no ajax pieprasījuma ? 2. Kā lai atgriež ajax rezultātu uz šo check_form() fju ? (Varētu, izmantojot globālos mainīgos) Varbūt varat uzskicēt kādu pseido kodu, lai izprastu risinājuma būtību ?
Recommended Posts