• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Powiadomienie o zakończeniu działania

Cloud VPS
0 głosów
412 wizyt
pytanie zadane 18 stycznia 2016 w JavaScript przez Domin Początkujący (360 p.)

Cześć!

Mam zamiar zrobić w prostej gierce przeglądarkowej misje, w której po kliknięciu odpowiedniej misji, włączy się licznik, a po jego zakończeniu wyskoczy wiadomość z rezultatem.

Rozkminiłem to tak:

Kliknięcie w przycisk zadania -> wpisanie do rekordu koniec zadania -> jeśli obecna data jest większa lub równa dacie z rekordu dodaje nam monety i ustawia domyślny rekord końca misji.

Dodałem skrypt, który odświeża diva z monetami co 500ms, zastanawiam się, czy to może spowodować jakieś serwerowe lagi?

Czy do każdego buttona potrzebuje kolejnej funkcji?

Proszę również o jakieś uwagi co do kodu, w celu ulepszenia :)

Z góry dzięki!

$(document).ready(function() {
    $("#FormSubmit").click(function (e) {
            e.preventDefault();
            
            $("#FormSubmit").hide(); 
            
            
             var myData = 'content_txt='+ $("#contentText").val(); //build a post data structure
            jQuery.ajax({
            type: "POST", 
            url: "re2.php",
            dataType:"text",
            data:myData, 
            success:function(response){
                $("#responds").append(response);
                $("#FormSubmit").show();

            },
            error:function (xhr, ajaxOptions, thrownError){
                $("#FormSubmit").show();
                alert(thrownError);
            }
            });
    });
});
    function refresh_div() {
        jQuery.ajax({
            url:'re3.php',
            type:'POST',
            success:function(results) {
                jQuery(".result").html(results);
            }
        });
    }

    t = setInterval(refresh_div,500);
    

re2.php

<?php
$username = "root"; //mysql username
$password = ""; //mysql password
$hostname = "localhost"; //hostname
$databasename = 'gra'; //databasename

//connect to database
$mysqli = new mysqli($hostname, $username, $password, $databasename);

$zero = "0000-00-00 00:00:00";
$time = date('Y-m-d H:i:s', strtotime('+10 second'));
$data = date('Y-m-d H:i:s');

$check = $mysqli->query("SELECT koniec FROM gracze WHERE nick = 'domin' ");
while($row = $check->fetch_assoc())
{
  $kuniec = $row["koniec"];

}
if($kuniec!=$zero){
	echo "Aktualnie robisz zadanie";
} else{
$tez = $mysqli->query("UPDATE gracze SET koniec = '$time' WHERE nick = 'domin'");
}
?>

re3.php

<?php
$username = "root"; //mysql username
$password = ""; //mysql password
$hostname = "localhost"; //hostname
$databasename = 'gra'; //databasename

//connect to database
$mysqli = new mysqli($hostname, $username, $password, $databasename);


$check = $mysqli->query("SELECT koniec FROM gracze WHERE nick = 'domin' ");
while($row = $check->fetch_assoc())
{
  $time = $row["koniec"];

}
$zero = "0000-00-00 00:00:00";
$data = date('Y-m-d H:i:s');

$datetime1 = date_create($time);
$datetime2 = date_create($data);


$left = date_diff($datetime1,$datetime2);

$dodaj = $mysqli->query("SELECT monety FROM gracze WHERE nick = 'domin' ");
while($row = $dodaj->fetch_assoc())
{
  echo $row["monety"];
  if($time != $zero){
	  echo 'Do końca misji pozostało: '.$left->format("%s");
  }

}




if($time<=$data && $time != $zero){
	$tez = $mysqli->query("UPDATE gracze SET koniec = '$zero' WHERE nick = 'domin'");
	$dodaj = $mysqli->query("UPDATE gracze SET monety = monety + 1 WHERE nick = 'domin'");
}

?>

 

1 odpowiedź

+1 głos
odpowiedź 18 stycznia 2016 przez Comandeer Guru (607,100 p.)
Po co go odświeżać co 500ms? Jeśli wiesz kiedy zadanie się wykona, to odśwież stronę wówczas, gdy dany moment w czasie nastąpi – po prostu.
komentarz 18 stycznia 2016 przez Domin Początkujący (360 p.)
Co sekunde ma sprawdzać ile czasu pozostało do końca zadania. Nie wiem jak inaczej to rozwiązać.
komentarz 18 stycznia 2016 przez Comandeer Guru (607,100 p.)
Skoro wiesz kiedy zadanie się skończy, to zapisz sobie ten czas do zmiennej i po prostu do niego odliczaj. Nie potrzeba tutaj żadnego odświeżania.
komentarz 18 stycznia 2016 przez Domin Początkujący (360 p.)
Ta zmienna powinna być w sesji, tak aby odliczał nawet przy przeskakiwaniu po stronach?
komentarz 18 stycznia 2016 przez Comandeer Guru (607,100 p.)
Najlepiej tak zrobić.
komentarz 18 stycznia 2016 przez Domin Początkujący (360 p.)
Nie wiem czy dobrze to zaprojektowałem:

Klik submit -> Dodanie do rekordu końca czasu ->koniec czasu dodany do zmiennej w sesji -> pobranie zmiennej do javascriptu i zaczęcie odliczania ->jeśli odliczanie = 0 nastąpi refresh strony.
komentarz 18 stycznia 2016 przez Comandeer Guru (607,100 p.)
Powinno działać.

Podobne pytania

0 głosów
2 odpowiedzi 300 wizyt
pytanie zadane 29 kwietnia 2016 w JavaScript przez Paweł123 Nałogowiec (33,540 p.)
0 głosów
2 odpowiedzi 259 wizyt
pytanie zadane 11 kwietnia 2019 w PHP przez Majki Obywatel (1,410 p.)
0 głosów
0 odpowiedzi 142 wizyt
pytanie zadane 27 grudnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...