Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]Duplikowanie skryptu js w setinterval
Forum PHP.pl > Forum > Przedszkole
Deusx
Witam !

Mam mały problem, z którym nie potrafię sobie poradzić.

Kawałek kodu, który wczytuje plik php do div i go przeładowywuje:

index.html
  1. <script>
  2. var auto_refresh = setInterval(
  3.  
  4. function()
  5. {
  6. $('#load').fadeOut('slow').load('ajaxfl.php').fadeIn("slow");
  7. }, 3000);
  8. </script>


w pliku ajaxfl.php jest kawałek:
  1. <script language="JavaScript">
  2. flt'.$i.' = '.$Rest.';
  3. tfm'.$i.'();
  4. </script>


która odpowiada za odliczanie czasu (czyli z wartości 100 zrobi 1m 40s, 1m 39s...).

Niestety co odświeżenie "load" skrypt ten się duplikuje i odejmuje w tym samym czasie kolejną sekundę, czyli 10, 8, 5, 1.
Nie można przenieść kodu js do pierwotnego pliku, ponieważ wartość czasu jest pobierana z bazy danych a nowe rekordy mogą się pojawiać w każdym momencie, czas również musi się odliczać, a odświeżanie div co sekundę (ze stałym czasem) może spowodować spory problem dla serwera.

Na łatwiznę nie poszedłem, wszystkie możliwe próby naprawy tego problemu kończyły się fiaskiem. clearsetinterval stopuje mi odświeżanie gdziekolwiek bym go nie wstawił.

Bardzo proszę o pomoc
trueblue
A co to za funkcja tfmX()? Za każdym wywołaniem zmienna $i jest inna?
I napisz jaki efekt właściwie chcesz uzyskać.
Deusx
tfmX() wyświetla dokładną datę czyli np.: 19:40:12 27 stycznia 2015
fltX() to właśnie owe odliczanie do daty (co sekundę)

i odpowiada za ilość rekordów, z każdym kolejnym inkrementuje się.

Jak plik się odświeży, to nie odlicza po sekundzie 10 sek, 9 sek, 8 sek tylko dodaje sekudne co każde odświeżenie.
Dzięki zapytaniu o zmienna $i udało mi się naprawić błąd poprzez właśnie jej losową wartość, jednak chciałbym zrobić to w sposób właściwy.
trueblue
Czy data jest stała (zakładam, że to data zakończenia aukcji)? Jeśli tak, to czemu za każdym razem pobierasz ją z serwera?
Deusx
Data może ulegać zmianą przez akcję użytkownika
trueblue
Co każde odświeżenie pobieraj więc tylko datę, a funkcję zmniejszającą wstaw bezpośrednio w setInterval odejmując 3 sekundy od daty, albo osobną setInterval z interwałem 1 sekunda i odejmując 1 sekundę od daty.
Deusx
Przed napisaniem tematu zrobiłem tak jak proponujesz, jednak wywołać funkcję muszę w ajaxfl.php i tutaj jest problem, bo wywołuje ją raz, drugi, trzeci... i efekt jest identyczny mimo, że kod javascript został wyniesiony z ajaxfl.php.
Wszelkiego rodzaju kodowanie, json nic tutaj nie pomaga.
Zrobiłem wszelkie możliwe kombinację, jednak zawsze wracałem do początku - wszystko ma być w ajaxfl


Samo otworzenie ajaxfl.php da nam wszystkie pożądane rekordy z działającym kodem JS i ten kod działa ponad rok czasu do teraz poprzez echo w php. Co daje wiadomy efekt jednorazowego załadowania i koniec.

Zaznaczę że głównym problem tego pliku jest fakt więcej niż jednego odmierzacza czasu i wyświetlania daty czy w ogóle w działaniu kodu js.
Pierw z innymi skryptami do auto przeładowywania (wyłącznie) określonego div kod JS w ogóle nie działał bądź umierał z pierwszym odświeżeniem albo działy się inne cuda.
trueblue
Dlaczego funkcję odmierzającą czas musisz wywołać w pliku ajaxfl.php?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.