andrisp Posted September 18, 2006 Report Share 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(); Link to comment Share on other sites More sharing options...
Delfins Posted September 18, 2006 Report Share Posted September 18, 2006 ieliec fetch() deklarāciju augstāk par makeRequest... visticamāk kaut kas tiek iekavēts Link to comment Share on other sites More sharing options...
andrisp Posted September 18, 2006 Author Report Share Posted September 18, 2006 izmēģināju - nekā, tas pats Link to comment Share on other sites More sharing options...
Delfins Posted September 18, 2006 Report Share 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 Link to comment Share on other sites More sharing options...
andrisp Posted September 18, 2006 Author Report Share 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. Link to comment Share on other sites More sharing options...
Delfins Posted September 18, 2006 Report Share 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 Link to comment Share on other sites More sharing options...
andrisp Posted September 18, 2006 Author Report Share Posted September 18, 2006 Es tieši gribēju iztikt bez globāliem mainīgajiem, bet nu papētīšu tavu doto kodu Link to comment Share on other sites More sharing options...
Delfins Posted September 18, 2006 Report Share Posted September 18, 2006 man ir bez globālajiem.. Ja neesi stiprs OOP/JS, labāk nelien pagaidām tur. Link to comment Share on other sites More sharing options...
andrisp Posted September 18, 2006 Author Report Share 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 Link to comment Share on other sites More sharing options...
Delfins Posted September 19, 2006 Report Share Posted September 19, 2006 Programmēšana ir netikai darbs, bet arī māksla. Ja nesaproti mākslu, tad nekas tur labs nesanāks. Link to comment Share on other sites More sharing options...
andrisp Posted September 19, 2006 Author Report Share 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) {} } } Link to comment Share on other sites More sharing options...
bubu Posted September 19, 2006 Report Share 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 Link to comment Share on other sites More sharing options...
andrisp Posted September 19, 2006 Author Report Share 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. Link to comment Share on other sites More sharing options...
Delfins Posted September 19, 2006 Report Share Posted September 19, 2006 var arī ar referencēm, tas nemaina būtību. It is just an example. Link to comment Share on other sites More sharing options...
andrisp Posted September 19, 2006 Author Report Share 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 ? Link to comment Share on other sites More sharing options...
Recommended Posts