Witam.
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)); }
mysql_query("update gracze set online = ".time()." 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;
echo json_encode
($tablica);
?>
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'));
} else { bgPos
= bgPos
.split(' '); bgPos
= parseInt
(bgPos
[1
]); ie
= false; } 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.