onreadystatechange parameteratadas
Sziasztok!
Van egy fuel objektumom:Ezt szeretnem egy olyan fuggvenybol modositani, amit az oldalon egy textarea elhagyasa (onblur) aktival*.
Tehat ha valakimodositott a textarean, akkor a szervertol kapjon a javascript egy date, sum, place harmast es ezt irja bele a fuel objektumba.
A PROBLEMA: nem tudom a fuel objektumot odaadni a feldolgozo fuggvenyemnek, magyaran:Itt a fuel_processing(fuel) nem mukodik. nem tudok parametert atadni (firefox alatt).
Vagyis mukodik de csak a readyState == 1-ig jut el, a 2,3,4 mar nem fut le.
KERDES: Hogyan lehet a hivo fuggveny objektumat elerni a fuel_processing() fuggvenybol?
Csak ugy tudommost megoldani, hogyha a fuel fuggvenyt peldanyositom es globalis objektumot csinalok belole. Elegansabbmegoldas letezik?
FOLYAMATABRA (amit meg szeretnek oldani):
felhasznalo modosit egy bejegyzest->szerver valaszkent kuld egy 3 elemu tombot (date, sum, place)-> a megkapott adatot egy mar letezo objektum tulajdonsagaihoz kellene illeszteni.
*: ((btw, tudja valaki hogyan kell elkapni, hogyha valaki entert ut egy textarean?))
Remelem ertheto, es nem lett tul bonyolultan megfogalmazva.
■ Van egy fuel objektumom:
function fuel() {
this.date = new Array("20060101", "20060213", "20060303");
this.sum = new Array(12340, 3450, 0);
this.place = new Array("OMV", "Mol", "Jet");
}
Tehat ha valakimodositott a textarean, akkor a szervertol kapjon a javascript egy date, sum, place harmast es ezt irja bele a fuel objektumba.
A PROBLEMA: nem tudom a fuel objektumot odaadni a feldolgozo fuggvenyemnek, magyaran:
function fuel_from_server() {
xmlhttp.open("GET", "../cgi-bin/serv_fuel.py", true);
xmlhttp.onreadystatechange = fuel_processing(fuel);
xmlhttp.send(null);
}
Vagyis mukodik de csak a readyState == 1-ig jut el, a 2,3,4 mar nem fut le.
KERDES: Hogyan lehet a hivo fuggveny objektumat elerni a fuel_processing() fuggvenybol?
Csak ugy tudommost megoldani, hogyha a fuel fuggvenyt peldanyositom es globalis objektumot csinalok belole. Elegansabbmegoldas letezik?
FOLYAMATABRA (amit meg szeretnek oldani):
felhasznalo modosit egy bejegyzest->szerver valaszkent kuld egy 3 elemu tombot (date, sum, place)-> a megkapott adatot egy mar letezo objektum tulajdonsagaihoz kellene illeszteni.
*: ((btw, tudja valaki hogyan kell elkapni, hogyha valaki entert ut egy textarean?))
Remelem ertheto, es nem lett tul bonyolultan megfogalmazva.
nem adhatsz meg paramétereket
"no parameters passed, because you're simply assigning a reference to the function, rather than actually calling it."
bado
Paraméteres eseménykezelés
Például ebben a témában is fellelhető:
http://weblabor.hu/forumok/temak/17482
De ha keresel a bűvös szóra a Weblabor keresőjében, akkor még több dolog is eljőjön.
Amúgy abban az esertben, hogyha csak egyetlen fule-frissítész hajtasz végre egyidőben nyugodtan dolgozhatsz window.fulel-lal, ezt minen eseménykezelő eléri closure nélkül is.
szinkronizalas, timout vagy mi?
A closure az nalad a {} kapcsos zarojelek kozotti resz, vagy valami nyelvi elem?
Van egy masik problemam is:
A kis szkriptem valaszol egy xml-lel (2005, 1234, mol) amit beirok (egyelore globalis) fuels objektumomba. A problema, hogy a megjelenites hamarabb tortenik mint az objektum frissitese (gondolom van valami kesleltetes a halon, megha localhost is).
Ha egy alert() hivast beteszek (tehat manualisan addig megszakitom a javascript futasaat), akkor a frissitett fuels objektum jelenik meg.
Erre van valami 5leted?
Ime a kod:
Megjeleítő rész csak a válasz után fusson le
Ha AJAX-ot csinálsz, figyelj az első A betűre! Csinálhatsz SJAX-ot is. Akkor csak egyetlen sort kell módosítanod:
Ne várj szikronizálást, ha egyszer az AJAX melett döntöttél.
szinkronizalas
Mondok egy kepzeletbeli peldat:
van egy ajaxos vasarlos oldalam, a vasarlas es az aruk kivalasztasa is ajax segitsegevel tortenik. A felhasznalo a kosarba tesz egy arut (amit a szerver oldalon is lekezel), majd nagyon gyorsan (<1s) a vasarlas befejezese (checkout) gombra kattint. Vajon a legutolso arut is meg fogja venni, vagy meg az eggyel elobbi alapotot vasarolja?
Szoval vannak peldak ahova kell szinkronizalas (es majd nekem is kelleni fog, a fenti peldara teljesen analog modon).
Van erre valami jo tipped, vagy esetleg leirasod?
Khiraly
Nem kell mindent szinkronizálni
- a vásárló megnyomja a gombot
- a javascript legyártja a kérés paramétereit (xmlhttp)
- http hívás (tcp egyeztetés)
- a szerver elindítja a (php) szkriptet
- a szkript elvégzi a változásokat az adatbázisban
- a szkript elkészíti a választ az AJAX kérésre
- a válasz megérkezik
- az eseménykezelő javascript elvégzi a módosításokat DOM (vagy innerHTML) segítségével
A lényeg, hogy a kliens -> szerver üzenetküldés villámgyors. Nem akarok hülyeséget mondani, de ha az egész idő kb 1 másodperc, akkor az első két tizedmásodpecben megtörténik az üzenetküldés és a feldolgozás.
De a fenti esetnél maradva, ha valaki betesz valamit a kosárba, és nem várja meg, hogy megjelenjen, hanem egyből továbbnyomja, az ne csodálkozzon, ha nem lesz benne az elem :)