Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z odświeżaniem strony.
MalKavar
post 9.10.2016, 16:57:40
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 3.05.2015

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


[Java][/Java]Więc, piszę skrypt, który co sekundę odpytuje bazę danych o odpowiednie dane. Wszystko za pomocą ajax. Poza tym, z formularza jest wykonywany plik php, który dodaje co jakiś czas rekordy do bazy. I tu zaczyna się problem. Po kilkunastu sekundach skrypt pada. Tak jakby setTimeout postanowił zaniemówić. Ktoś może spotkał się z czymś takim?
Funkcja odswiezaj i wstaw
[JAVASCRIPT] pobierz, plaintext
  1. function odswiezaj()
  2. {
  3. getData('includes/pobierz.php','mojDIVIK');
  4. setTimeout("odswiezaj();", 1000);
  5. }
  6.  
  7. function wstaw()
  8. {
  9. var tresc = document.getElementById("form").tresc.value;
  10. //var nick = document.getElementById("form").nick.value;
  11. var html = 'includes/dodaj.php'+'?tresc='+tresc;
  12. document.getElementById("form").tresc.value = '';
  13. //document.getElementById("form").nick.value = nick;
  14.  
  15. getData(html,'mojDIVIK');
  16. }
[JAVASCRIPT] pobierz, plaintext



Funkcja getData
[JAVASCRIPT] pobierz, plaintext
  1. function getData(dataSource, divID)
  2. {
  3. // kontynuuje wylacznie gdy obiekt nie jest zajety
  4. if (object.readyState==4 || object.readyState==0)
  5. {
  6. // tworzy zmienna odpowiadajaca konkretnemu obiektowi na stronie
  7. var obj = document.getElementById(divID);
  8.  
  9. // czyta z pliku lub wykonuje skrypt
  10. object.open("GET", dataSource);
  11.  
  12. // definiuje metode obslugi odpowiedzi serwera
  13. object.onreadystatechange = function()
  14. {
  15. // kontynuuje jesli transmisja zostala zakonczona powodzeniem
  16. if (object.readyState == 4 && object.status == 200){
  17. obj.innerHTML= object.responseText;}
  18. else getData(dataSource, divID);
  19. }
  20. // wysyla zadanie do serwera
  21. object.send(null);
  22. }
  23. else getData(dataSource, divID);
  24. }
[JAVASCRIPT] pobierz, plaintext


Ten post edytował MalKavar 9.10.2016, 17:01:39
Go to the top of the page
+Quote Post
trueblue
post 9.10.2016, 17:13:18
Post #2





Grupa: Zarejestrowani
Postów: 5 058
Pomógł: 1410
Dołączył: 11.03.2014

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


Nie uważasz, że za dużo odwołań rekurencyjnych?
Go to the top of the page
+Quote Post
MalKavar
post 9.10.2016, 17:21:49
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 3.05.2015

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


W funkcji getDate w sensie? Jak widać wyżej obie funkcje korzystają z getDate - o ile dla odbierania danych można przeżyć odpowiedź po np 5 sekundach(przyjmuję, że kilka razy się może nie wykonać z powodu braku dostępu do pliku), o tyle dla wysyłania nie mogę pozwolić na stratę żadnego wysłanego zapytania. Prznajmniej takie jest moje myślenie. Samo wysyłanie się poprawiło po wprowadzeniu tych rekurencji, wysyła się w 99% wypadków, jednak z odbieraniem gorzej - jak napisałem wyżej, po 10, max 20 sekundach skrypt zdaje się zaprzestawać akcji.
Go to the top of the page
+Quote Post
trueblue
post 9.10.2016, 17:27:00
Post #4





Grupa: Zarejestrowani
Postów: 5 058
Pomógł: 1410
Dołączył: 11.03.2014

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


Nie wiem jak rozumiem stratę wysyłanego zapytania.

Ponowienie wysyłania powinno nastąpić w funkcji zdefiniowanej we właściwości onreadystatechange obiektu.
Tam sprawdzasz wynik, odświeżasz div na jego podstawie i wywołujesz ponownie funkcję.
Go to the top of the page
+Quote Post
MalKavar
post 9.10.2016, 17:33:36
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 3.05.2015

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


Możesz to wyjaśnić dokładniej bo nie do końca rozumiem. W moim założeniu

jeśli(readystate == 4 lub readystate == 0)
wykonuj zadanie
w przeciwnym wypadku
wykonaj się ponownie
Go to the top of the page
+Quote Post
viking
post 9.10.2016, 17:39:29
Post #6





Grupa: Zarejestrowani
Postów: 4 860
Pomógł: 821
Dołączył: 30.08.2006

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


A gdzie tu jakieś kolejkowanie zadań? IMO powinieneś użyć promise, po zakończeniu albo timeoucie wysłać jeszcze raz niezapisane dane. No i XHR kompletnie nie pasuje do takiego zadania.


--------------------
Go to the top of the page
+Quote Post
MalKavar
post 9.10.2016, 17:46:09
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 3.05.2015

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


@viking - jakieś porady do tego, żeby to działało sprawnie? Jakiś inny sposób oprócz XHR?
Go to the top of the page
+Quote Post
trueblue
post 9.10.2016, 17:51:00
Post #8





Grupa: Zarejestrowani
Postów: 5 058
Pomógł: 1410
Dołączył: 11.03.2014

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


Ja nie wiem co chcesz osiągnąć, ale może taki przykład Ci w jakiś sposób pomoże: https://jsfiddle.net/w3yhnzmw/
Go to the top of the page
+Quote Post
viking
post 9.10.2016, 18:06:42
Post #9





Grupa: Zarejestrowani
Postów: 4 860
Pomógł: 821
Dołączył: 30.08.2006

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


To nie JS powinien zajeżdżać serwer co sekundę tylko serwer powinien informować że nastąpiła zmiana. Zatem https://developer.mozilla.org/en-US/docs/We...ver-sent_events
Zapis - zależy jak to działa.


--------------------
Go to the top of the page
+Quote Post
MalKavar
post 9.10.2016, 18:16:15
Post #10





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 3.05.2015

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


Hmm... Nie pomyślałem o takim rozwiązaniu.
@viking, z tego co widzę na pierwszy rzut oka - twoje rozwiązanie jest o wiele lepsze. Postaram się je szybko wprowadzić. W razie problemów mogę liczyć na twoją pomoc na PW? Javascript nie jest moją mocną stroną.
P.S Z tego co wyczytałem rozwiązanie nie jest wspierane przez IE i tylko częściowo przez Safari. Da radę zrobić, żeby i na tych przeglądarkach to zadziałało bez zarzutu? Zależy mi głównie na Safari.
@trueblue Twoje rozwiązanie póki co działa bez zarzutu, ale wciąż sprawdzam.
Go to the top of the page
+Quote Post
viking
post 9.10.2016, 18:26:14
Post #11





Grupa: Zarejestrowani
Postów: 4 860
Pomógł: 821
Dołączył: 30.08.2006

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


Standardowo przez polyfille https://github.com/Yaffle/EventSource


--------------------
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: 25.06.2018 - 18:42