Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Odświeżanie skryptu
Forum PHP.pl > Forum > Przedszkole
miras
Witam, mam następujący problem:

  1. var xmlhttp;
  2.  
  3. function showPart(str)
  4. {
  5. xmlhttp=GetXmlHttpObject();
  6. var url="getuser.php";
  7. url=url+"?part="+str;
  8. url=url+"&sid="+Math.random();
  9. xmlhttp.onreadystatechange=stateChanged;
  10. xmlhttp.open("GET",url,true);
  11. xmlhttp.send(null);
  12. }
  13.  
  14. function stateChanged()
  15. {
  16. if (xmlhttp.readyState==4)
  17. {
  18. document.getElementById("informacja").innerHTML=xmlhttp.responseText;
  19. }
  20. }
  21.  
  22. function GetXmlHttpObject()
  23. {
  24. if (window.XMLHttpRequest)
  25. {
  26. return new XMLHttpRequest();
  27. }
  28. return null;
  29. }
  30.  


ten kod odświeża mi plik getuser.php, tylko wtedy jak zmieni się wartość selecta, a ja potrzebuję przerobić to tak, żeby odświeżało się samo np. co 10sekund, da się to osiągnąć ?

Dzięki z góry!
kamil4u
poczytaj o setInterval
miras
Moja znajomość js, nie jest nawet na poziomie podstawowym, czytałem już o różnych rozwiązaniach, ale za nic nie mogę tego zastosować..

Jakiś mały przykład to by było miło bo mi nic nie wychodzi..
kamil4u
Przykład... hmm... Google -> "setInterval js" -> https://developer.mozilla.org/pl/DOM/window.setInterval a, to jest dokumentacja. I masz tam przykład.

--edit--
Cytat
Jakiś mały przykład to by było miło bo mi nic nie wychodzi..

Pokaż jak próbowałeś
miras
Ja wykombinowałem coś takiego:
  1.  
  2. var xmlhttp;
  3. var coo = document.getElementsByName("rekord");
  4. var co = co[0];
  5.  
  6. function showPart(str)
  7. {
  8. xmlhttp=GetXmlHttpObject();
  9. var url="getuser.php";
  10. url=url+"?part="+str;
  11. url=url+"&sid="+Math.random();
  12. xmlhttp.onreadystatechange=stateChanged;
  13. xmlhttp.open("GET",url,true);
  14. xmlhttp.send(null);
  15. }
  16.  
  17. function stateChanged()
  18. {
  19. if (xmlhttp.readyState==4)
  20. {
  21. document.getElementById("informacja").innerHTML=xmlhttp.responseText;
  22. }
  23. }
  24.  
  25. function GetXmlHttpObject()
  26. {
  27. if (window.XMLHttpRequest)
  28. {
  29. return new XMLHttpRequest();
  30. }
  31. return null;
  32. }
  33.  
  34. intervalID = window.setInterval(showPart(co.value), 500);


Nie robiłem tego 'na chama', żeby tylko pokazać, że coś robiłem i dostać gotowca, chociaż do tego bije, ale naprawdę się starałem..
kamil4u
Cytat
intervalID = window.setInterval(showPart(co.value), 500);

Czytałeś w ogóle manual-a?

Cytat
var idInterwalu = window.setInterval(funkcja, opóźnienie[, parametr1, parametr2, ...])
;
Zobacz gdzie masz parametry, a gdzie ona są u Ciebie.

Jeszcze, żebyś dobrze zrozumiał to co jest w manualu:
-
Cytat
funkcja to funkcja, dla której ustawiane jest opóźnienie
Tu podajesz jedynie samą nazwę - bez parametrów i bez nawiasów - sama nazwa
-
Cytat
kod to ciąg znaków zawierający kod javascript do cyklicznego wykonania
- tu możesz wstawić dowolny kod JS w cudzysłowach. Czyli może to wyglądać np. tak: "funkcja(1,2,3); funkcja2( test.value );" , jednak jest to niezalecane, dlatego zrób tak jak napisałem wyżej.

Poza tym:
Kod
var coo = document.getElementsByName("rekord");
var co = co[0];


Chyba coo[0] wink.gif

I upewnij się, że masz DOM załadowany, czyli wstaw na chwilę po var co = coo[0]; linię alert( co );. Jeśli wyskoczy błąd( nie referencja do elementu ) to cały swój kod wstaw w:
Kod
onload = function(){
// tu wstaw kod
}
miras
ehh, mówiłem nie łapie tego, nie mam nawet żadnych podstaw js, więc o czym mowa, dobra, ale dzięki za fatyge.
kamil4u
No ale tu ni trzeba podstaw. Nie chcę Ci dawać gotowca i tyle. Trochę się pomęczysz to będziesz się lepiej czuł jak Ci wyjdzie. Czego nie rozumiesz - konkretnie?
miras
Myślę, że moja odpowiedź zobrazuje to, czego nie rozumiem:

  1. var xmlhttp;
  2. var coo = document.getElementsByName("rekord");
  3. var co = coo[0];
  4. var intervalID = window.setInterval(showPart, 500[, coo, co]);
  5.  
  6. function showPart(str)
  7. {
  8. xmlhttp=GetXmlHttpObject();
  9. var url="getuser.php";
  10. url=url+"?part="+str;
  11. url=url+"&sid="+Math.random();
  12. xmlhttp.onreadystatechange=stateChanged;
  13. xmlhttp.open("GET",url,true);
  14. xmlhttp.send(null);
  15. }
  16.  
  17. function stateChanged()
  18. {
  19. if (xmlhttp.readyState==4)
  20. {
  21. document.getElementById("informacja").innerHTML=xmlhttp.responseText;
  22. }
  23. }
  24.  
  25. function GetXmlHttpObject()
  26. {
  27. if (window.XMLHttpRequest)
  28. {
  29. return new XMLHttpRequest();
  30. }
  31. return null;
  32. }
  33.  
kamil4u
No to teraz: var intervalID = window.setInterval(showPart, 500[, coo, co]); --> var intervalID = window.setInterval(showPart, 500, co.value);

i

Cytat
I upewnij się, że masz DOM załadowany, czyli wstaw na chwilę po var co = coo[0]; linię alert( co );. Jeśli wyskoczy błąd( nie referencja do elementu ) to cały swój kod wstaw w:
Kod
onload = function(){
// tu wstaw kod
}
miras
Podziwiam za cierpliwość, to już działa, a jeszcze jedno pytanko - mógłbyś jeszcze podpowiedzieć jak zmienić kod js, żeby nie było trzeba w indexie dawać tych selectow ?

  1. <strong>Wybierz część</strong>
  2. <select name="rekord" onchange="showPart(this.value)">
  3. <option value="1">Lusterko</option>
  4. <option value="2">Opony letnie</option>
  5. <option value="3">Katalizator</option>
  6. </form>


  1. onload = function() {
  2.  
  3. var xmlhttp;
  4. var coo = document.getElementsByName("rekord");
  5. var co = coo[0];
  6. var intervalID = window.setInterval(showPart, 500, co.value);
  7.  
  8. function showPart(str)
  9. {
  10. xmlhttp=GetXmlHttpObject();
  11. var url="getuser.php";
  12. url=url+"?part="+str;
  13. url=url+"&sid="+Math.random();
  14. xmlhttp.onreadystatechange=stateChanged;
  15. xmlhttp.open("GET",url,true);
  16. xmlhttp.send(null);
  17. }
  18.  
  19. function stateChanged()
  20. {
  21. if (xmlhttp.readyState==4)
  22. {
  23. document.getElementById("informacja").innerHTML=xmlhttp.responseText;
  24. }
  25. }
  26.  
  27. function GetXmlHttpObject()
  28. {
  29. if (window.XMLHttpRequest)
  30. {
  31. return new XMLHttpRequest();
  32. }
  33. return null;
  34. }
  35.  
  36. }
kamil4u
Nie rozumiem pytania. Opisz dokładniej.
miras
to tak są 2 pliki:

index.php:

  1. <head>
  2. <script type="text/javascript" src="wybor.js"></script>
  3. </head>
  4.  
  5. <strong>Wybierz część</strong>
  6. <select name="rekord" onchange="showPart(this.value)">
  7. <option value="1">Lusterko</option>
  8. <option value="2">Opony letnie</option>
  9. <option value="3">Katalizator</option>
  10. </form>
  11. <br />
  12.  
  13. <div id="informacja">Opis wybranej części:</div>
  14.  
  15. </body>
  16. </html>
- tak wygląda a plik wybor.js w poprzendnim poście jest, problem polega na tym, że jeżeli usunę z pliku index.php

ten kawałek:
  1. <strong>Wybierz część</strong>
  2. <select name="rekord" onchange="showPart(this.value)">
  3. <option value="1">Lusterko</option>
  4. <option value="2">Opony letnie</option>
  5. <option value="3">Katalizator</option>
  6. </form>
to już nie wyświetla rekordów z bazy danych, a potrzebowałbym usunąć ten fragment kodu, rozumiesz ?
kamil4u
Ta linia:
Kod
var intervalID = window.setInterval(showPart, 500, co.value);

Mówi: Wywołaj funkcję showPart, co pół sekundy z parametrem co.value.

co.value to wartość aktualnie wybranej opcji z listy. Teraz patrzysz na wartości value, mogą one być 1, 2 lub 3.

Więc skasuj ten HTML i ten kod:
Kod
var coo = document.getElementsByName("rekord");
var co = coo[0];
var intervalID = window.setInterval(showPart, 500, co.value);


zamień na:
Kod
var intervalID = window.setInterval(showPart, 500, XXX);


Gdzie pod XXX wstaw 1,2 lub 3 w zależności od tego co chcesz.

Jeżeli nadal coś nie tak to opisz jeszcze dokładniej.
miras
Wszystko dobrze zrozumiałeś, dzięki za zmarnowanie na mnie całego wieczoru wink.gif.
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.