Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][JavaScript]Duplikowanie skryptu js w setinterval
Deusx
post 27.01.2015, 17:02:37
Post #1





Grupa: Zarejestrowani
Postów: 126
Pomógł: 2
Dołączył: 27.08.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował Deusx 27.01.2015, 17:04:38
Go to the top of the page
+Quote Post
trueblue
post 27.01.2015, 18:27:41
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A co to za funkcja tfmX()? Za każdym wywołaniem zmienna $i jest inna?
I napisz jaki efekt właściwie chcesz uzyskać.


--------------------
Go to the top of the page
+Quote Post
Deusx
post 27.01.2015, 19:41:15
Post #3





Grupa: Zarejestrowani
Postów: 126
Pomógł: 2
Dołączył: 27.08.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Deusx 27.01.2015, 19:49:15
Go to the top of the page
+Quote Post
trueblue
post 27.01.2015, 19:56:30
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
Deusx
post 27.01.2015, 20:10:02
Post #5





Grupa: Zarejestrowani
Postów: 126
Pomógł: 2
Dołączył: 27.08.2006

Ostrzeżenie: (0%)
-----


Data może ulegać zmianą przez akcję użytkownika
Go to the top of the page
+Quote Post
trueblue
post 27.01.2015, 20:13:12
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Deusx
post 28.01.2015, 18:21:42
Post #7





Grupa: Zarejestrowani
Postów: 126
Pomógł: 2
Dołączył: 27.08.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post 28.01.2015, 18:32:39
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Dlaczego funkcję odmierzającą czas musisz wywołać w pliku ajaxfl.php?


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 21:23