Mam problem z działaniem pewnego skryptu ajaxa.
Demo: magorm.cba.pl - admin/admin.
Aby sprawdzić co jest nie tak należy:
wejść na magorm.cba.pl/?x=mapa, a następnie kliknąc strzałkę w górę. (nie stanie się nic), a potem jeszcze raz strzałkę w górę (tym razem postać się poruszy).
Problem polega na tym, że zawsze po pierwszym załadowaniu strony i kliknięciu tej nieszczęsnej strzałki zmienna js się nie aktualizuje (ajax nie wyrzuca błędu, więc wszystko chyba pobiera). Za każdym kolejnym razem wszystko już działa okej i zmienia się dynamicznie.
Kody:
<?php $host_bazy_danych = ',,,'; $uzytkownik_bazy_danych = ',,,'; $haslo_bazy_danych = ',,,,'; $nazwa_bazy_danych = ',,,'; $polacz = mysql_connect($host_bazy_danych, $uzytkownik_bazy_danych, $haslo_bazy_danych) or die('socket error'); function gracz($sesja){ $gracz = mysql_fetch_array(mysql_query("select *, (select count(*) from gracze g where g.exp > exp) as pozycja from gracze where gracz = ".$sesja)); } return $gracz ; } $oGracz = gracz($_SESSION['gracz']); if ($oGracz['y'] <= 8){ $ruszaj_graczem = "#anim"; $gdzie = "-"; } else{ $gdzie = "+"; $ruszaj_graczem = "#map"; } if ($oGracz['y'] <=7){ $ruszaj_graczem2 = "#anim"; $gdzie2 = "+"; } else{ $ruszaj_graczem2 = "#map"; $gdzie2 = "-"; } $tablica['wynik2'] = $gdzie; $tablica['wynik'] = $ruszaj_graczem; $tablica['wynik3'] = $ruszaj_graczem2; $tablica['wynik4'] = $gdzie2; ?>
I JS:
<script> ;(function($){ var settings = {}; var element = {}; var currFrame = 0; var tm = null; $.fn.gracz = function(sett){ element = $(this); settings = $.extend({}, $.fn.gracz.defaults, sett); function _build(){ element.width(settings.frameWidth); element.height(settings.frameHeight); element.css('background-position', '0 0'); }; _build(); }; $.fn.gracz.pause = function(){ if(tm){ clearTimeout(tm); } tm = null; } $.fn.gracz.stop = function(){ if(tm){ clearTimeout(tm); } tm = null; currFrame = 0; element.css('background-position', '0 0'); } $.fn.gracz.pause = function(){ clearTimeout( tm ); tm = null; } $.fn.gracz.play = function(){ if(settings.totalFrames <= 0 || !element || !element.length){ return; } function _animate(){ var tmFn = function(){ _animate(); }; var bgPos = element.css('background-position'); var ie = true; if(bgPos == 'undefined' || bgPos == null){ bgPos = parseInt(element.css('background-position-y')); bgPos -= settings.frameHeight - 1; if(ie){ element.css('background-position-y', bgPos + 'px'); } else { element.css('background-position', ('0px ' + bgPos + 'px')); } currFrame++; if(currFrame > (settings.totalFrames - 1)){ currFrame = 0; element.css('background-position', '0 0'); if(!settings.loop){ return; } } tm = setTimeout(tmFn, settings.speed); } if(tm){ element.gracz.stop(); } _animate(); } $.fn.gracz.defaults = { frameWidth: 32, frameHeight: 32, speed: 60, totalFrames: 0, loop: false }; })(jQuery); function go(where,mapID) { var req = mint.Request(); req.OnSuccess = function () { text = this.responseText; if(text.substring(0,2) == 'ok') { switch(where){ case 1: go_left(); break; case 2: go_right(); break; case 3: go_up(); break; case 4: go_down(); break; } var gg = document.getElementById('box'); if(text.substring(0,5) == 'oknpc') { who = text.substring(5,7); gg.innerHTML = "<a href='?x=npc'>odwiedź npc!</a>"; gg.style.display = "block"; } else { if(text.substring(0,8) == 'okpotwor') { who = text.substring(9,10); gg.innerHTML = "<a href='?x=walka'>walcz z potworem!!</a>"; gg.style.display = "block"; } else{ if(text.substring(0,12) == 'okrosliny') { gg.innerHTML = "<a href='?x=plecak'>Podnieś</a>"; gg.style.display = "block"; } else { if(text.substring(0,10) == 'okteleport') { who = text.substring(11,12); document.location.href= "?x=portal"; gg.style.display = "block"; } else { if(text.substring(0,11) == 'okprzedmiot') { gg.innerHTML = "<a href='?x=plecak'>zobacz co tu leży</a>"; gg.style.display = "block"; } else { if(text.substring(0,10) == 'okskrzynia') { document.location.href= "?x=skrzynia"; gg.style.display = "block"; } else { gg.style.display = "none"; } } } } } } } }, req.OnError = function () { } req.Send ("ajax_map.php?where="+where+"&map="+mapID); } function players() { var req = mint.Request(); req.OnSuccess = function () { text = this.responseText; var gg = document.getElementById('box_players'); if(gg) { gg.innerHTML = text; } }, req.OnError = function () { } req.Send ("players.php"); } var get_players=setInterval(players, 1500); function go_left(){ $('#anim').css('background',lQwedg); $('#map').animate({"left": "+=32px"},'slow'); $('#anim').gracz.play(); return false; } function go_right(){ $('#anim').css('background',rdkEvp); $('#map').animate({"left": "-=32px"},'slow'); $('#anim').gracz.play(); return false; } function go_up(){ $.ajax( { type: "POST", url: "www/map/czat1.php", dataType: 'json', success: function(result){ ruszaj = result['wynik']; gdzie = result['wynik2']; }, error: function(error){ alert("wystąpił błąd"); } }); $('#anim').css('background',ugioEf); $(ruszaj).animate({"top": (gdzie + "=32px")},'slow'); $('#anim').gracz.play(); return false; } function go_down(){ $.ajax( { type: "POST", url: "www/map/czat1.php", dataType: 'json', success: function(result){ ruszaj2 = result['wynik3']; gdzie2 = result['wynik4']; }, error: function(error){ alert("wystąpił błąd"); } }); $('#anim').css('background',dwQjfn); $(ruszaj2).animate({"top": (gdzie2 + "=32px")},'slow'); $('#anim').gracz.play(); return false; } function handleArrowKeys(evt) { evt = (evt) ? evt : ((window.event) ? event : null); if (evt) { switch (evt.keyCode) { case 37: go(1,mapID); break; case 39: go(2,mapID); break; case 38: go(3,mapID); break; case 40: go(4,mapID); break; } } } document.onkeydown = handleArrowKeys; $(document).ready(function(){ $('#anim').gracz({ frameWidth: 33 , frameHeight: 33, speed: 140, totalFrames: 3 }); $('#startLeft').click(function(){ go(1,mapID); }); $('#startRight').click(function(){ go(2,mapID); }); $('#startUp').click(function(){ go(3,mapID); }); $('#startDown').click(function(){ go(4,mapID); }); }); </script>
Kod php aktualizuje pozycję gracza (bo jeśli po pierwszym wejściu klikniemy strzałkę w górę to postać zmieni pozycję, ale nie poruszy się - nie będzie animacji).
Pozdrawiam.