Chcę stworzyć stronę, która będzie się aktualizowała bez potrzeby odświeżania przez użytkownika. Jeden z obiektów, po najechaniu na niego - ma pokazywać w okienku dokładną liczbę HP pobieraną z atrybutu data-hp. Kolejna funkcja to timer, który jest uruchamiany powiedzmy raz na minutę i sprawdza w bazie ilość HP i różnicę czasu przed ostatnim sprawdzeniem a aktualnym. Jeśli różnica to więcej niż minuta, w atrybucie data-hp ma się pojawić takie równanie:
HP = HP + (minuty * 2).
Czyli na każdą minutę dostajemy 2 HP.
Na początku przedstawię kod, powiedzmy że mamy na stronie taki element:
Jest to pasek HP (ilości życia). Kiedy atrybut data-hp zostanie zaktualizowany przez funkcję z timerem (AJAX), przychodzi kolejne zadanie. Atrybut data-hp musi zostać odczytany i wyświetlony w innym obiekcie. Kod:
function update_stats(){ var HP = $("#hp_amount").attr("hp"); var maxHP = $("#hp_amount").attr("maxhp"); $.ajax({ url: '../game/data/stats_update.php', type: 'post', data : { ID : '<?php echo $USER['ID']; ?>' }, dataType: 'html', success: function(response) { $('#hp_amount').attr("data-hp", response); } }); setTimeout(update_stats, 2000); } setTimeout(update_stats, 2000);
Jak widzicie kiedy AJAX sukcesywnie wykona swoją robotę do obiektu hp_amount zostaje dodany/zmieniony atrybut data-hp. Z tym nie ma problemu, kod źródłowy na stronie się aktualizuje.
Problemem jest natomiast odczytanie ZAKTUALIZOWANEGO obiektu hp_amount przez kolejną funkcję jQuery. Wygląda ona tak:
$('#hp').on('mousemove', function(e){ var maxHP = $("#hp_amount").data("maxhp"); var HP = $("#hp_amount").data("hp"); var MouseX = e.pageX+45; var MouseY = e.pageY-20; $('#hud_info').text(HP+' / '+maxHP); $('#hud_info').fadeIn(100).css({ left: MouseX, top: MouseY }); });
Czyli po najechaniu na pasek życia w okienku (hud_info) ma się wyświetlać jego ILOŚĆ / ILOŚĆ CAŁKOWITĄ. Problem tkwi w tym, że pobierany jest stary atrybut, ten który został ustawiony podczas załadowania wstępnego strony a nie ten aktualny.
Czy mógłby ktoś mnie uświadomić gdzie jest błąd?
Pozdrawiam,
Hazes.