Közösségi játékom
Először is bocs a címért, jelen kérdésem csak egy "Javascript fgv. késleltetése az AJAX lefutásáig" lenne, de valószínűleg később lesz más kérdésem is és szeretném, ha az egész egy témában lenne.
A mostani problémám a következő:
Épp a játék bejelentkezés; szoba - és ellenfél-adatok folyamatos frissítése AJAX-szal részénél tartok, és ez még tökéletesen fut is.
Most egy Kilépés gombot csinálnék, ami kilépteti a játékost, majd lefuttat egy fgv.-t, ami beállítja a kezdőadatokat és behozza a kezdőoldali menüt.Ezzel ugye az a baj, hogy a player_update() után rögtön lefut a start() és felülírja a requestet, vagyis nem fut le a játékos kiléptetésének php fájlja.
Lehetne az a megoldás, hogy a player_update-be teszek egy onreadystatechange-et, és abba a start()-ot, de az a baj, hogy a player_update fgv.-t sok már fgv. is meghívja, mindig, ha vmit épp át kell írni (megnyert meccs, beállítások).
Azt akarom elkerülni, hogy az onreadystatechange-et szét kelljen ifezni, hogy ha a logout hivta meg, akkor ezt csinálja, ha egy másik fgv. akkor meg azt.
Kipróbáltam, hogy return-nel visszaadok egy 1-est, ha lefutott a request, de a logout fgv. nem várja meg, és az"undefined"-ot ad vissza.
Azt szeretném, ha bármelyik fgv. ha meghív egy olyan fgv.-t, amiben request van, akkor várja meg míg lefut, és csak azután hívjon meg egy másik olyan fgv.-t, amiben egy másik request van, anélkül, hogy az 1. request-es fgv.-t kellene szétifezni.
■ A mostani problémám a következő:
Épp a játék bejelentkezés; szoba - és ellenfél-adatok folyamatos frissítése AJAX-szal részénél tartok, és ez még tökéletesen fut is.
Most egy Kilépés gombot csinálnék, ami kilépteti a játékost, majd lefuttat egy fgv.-t, ami beállítja a kezdőadatokat és behozza a kezdőoldali menüt.
function logout() {
show_over_msg('logout', 'info');
// call player_update setting logout var
player_update('&logout=1');
// call start
start();
}
function player_update(update_string) {
xmlhttp = GetXmlHttpObject();
if(xmlhttp == null) {
alert ('Browser does not support HTTP Request');
return;
}
nocache = Math.random();
var url = 'player_update.php?player_id=' + overall_vars['player_id'] + '&player_type=' + overall_vars['player_type'] + '&nocache=' + nocache + update_string;
xmlhttp.open('GET',url,true);
xmlhttp.send(null);
}
function start() {
// ez eleg hosszu nem masolom be, ez allitja be a kezdoadatokat
hide_over_msg();
}
Lehetne az a megoldás, hogy a player_update-be teszek egy onreadystatechange-et, és abba a start()-ot, de az a baj, hogy a player_update fgv.-t sok már fgv. is meghívja, mindig, ha vmit épp át kell írni (megnyert meccs, beállítások).
Azt akarom elkerülni, hogy az onreadystatechange-et szét kelljen ifezni, hogy ha a logout hivta meg, akkor ezt csinálja, ha egy másik fgv. akkor meg azt.
Kipróbáltam, hogy return-nel visszaadok egy 1-est, ha lefutott a request, de a logout fgv. nem várja meg, és az
if(player_update('&logout=1') == 1)
Azt szeretném, ha bármelyik fgv. ha meghív egy olyan fgv.-t, amiben request van, akkor várja meg míg lefut, és csak azután hívjon meg egy másik olyan fgv.-t, amiben egy másik request van, anélkül, hogy az 1. request-es fgv.-t kellene szétifezni.
Csinálj egy olyan osztályt
fgv. paraméterben?
Én is próbáltam már ilyet,
ha ez működik
De így, h after_call_func; a readyState-ben nem futtatja le a paramétert. Én így pőróbáltam, és így nem sikerült, ezért gondolkodtam, h máshogy kéne.
Hogy futtatok le átadott paraméterben lévő fgv.-t?
Zárójel
A várt elem függvény
Nem jól adod át
{
}
player_update("whatever", myCallbackFunc);
Nagyon figyelj arra, hogy NE így hívd meg:
Ekkor ugyanis lefuttatja a függvényt és annak eredményét fogja visszaadni. Neked csak a függvény neve kell oda zárójelek nélkül.
Nincs zárójel
a te példádban myCallbackFunc a fgv. neve?
akkor leírom, nálam hogy van, és akkor tiszta lesz, h hogy adom át, és látszani fog a hiba.
tegyük fel, van 2 fgv.-em, ami meghívja a player_update fgv.-t. Az egyik a logout(), a másik mondjuk you_won() fgv.
akkor így néznek ki a fgv.-ek
És ez az a mód, ahogy nem tudom lefuttatni, vagy meghívni a paraméterben átadott fgv.-t
Nem
Szerk: lehet, hogy ehhez a fv-t igy kell deklaralni, fejbol nem tudom:
var fv = function() {};
Prototype keretrendszer
var fv = function() {};
viszont akkor az összes fgv.-t át kéne írnom majd ilyen deklarálásra, mert nem tudom még, hogy később meg fogom-e hívni vmelyiket és akkor kell majd átírnom, lehet, h jobb lenne mindegyik fgv.-t így deklarálnom.
másrészt szívesen utánanéznék ennek a prototype keretrendszernek is, ha ezzel egyszerűbbé tehetem a programot.
viszont csak Wikipedián találtam róla egy kis leírást. Tudtok adni egy linket, ahol utánanézhetek, hogy mi is ez?
Köszi
Ihun-e
Itt meg egy 5 részes sorozat
köszi