Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ajax] Problem z odświeżaniem zawartości
brutal1985
post 24.01.2012, 18:11:42
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 27.08.2011

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


Mam skrypt, w którym ładuje dynamicznie zawartość i pobieram rekordy z bazy danych. I wszystko niby dobrze działa, lecz gdy nie ma żadnych rekordów strona ciągle się samoczynnie przeładowuje. Jeśli rekordy są, to nie ma problemu.

Oto mój kod:
  1. <script type="text/javascript">
  2. var xmlHttp
  3.  
  4. function GetXmlHttpObject(){
  5. var objXMLHttp = null;
  6.  
  7. if(window.XMLHttpRequest){
  8. try{
  9. objXMLHttp = new XMLHttpRequest();
  10. }catch (e){
  11. objXMLHttp = false;
  12. }
  13. }else if(window.createRequest){
  14. try{
  15. objXMLHttp = new window.createRequest();
  16. }catch (e){
  17. objXMLHttp = false;
  18. }
  19. }else if(window.ActiveXObject){
  20. try{
  21. objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
  22. }catch (e){
  23. try{
  24. objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
  25. }catch (e){
  26. objXMLHttp = false;
  27. }
  28. }
  29. }
  30.  
  31. return objXMLHttp;
  32. }
  33. function GetShouts()
  34. {
  35. xmlHttp = GetXmlHttpObject()
  36. if (xmlHttp == null)
  37. {
  38. alert ("Browser does not support HTTP Request")
  39. return
  40. }
  41. var url="zal_art.php"
  42. //The file you're using to display the entries/shouts most likely the current file..
  43. xmlHttp.open("GET", url, true)
  44. xmlHttp.onreadystatechange = function ()
  45. {
  46. if (xmlHttp.readyState == 4)
  47. {
  48. if (xmlHttp.status == 200)
  49. {
  50. document.getElementById("zal_art").innerHTML = xmlHttp.responseText;
  51. //Shoutarea is the id of my div the shouts appear in so change that accordingly.
  52. }
  53. }
  54. };
  55. xmlHttp.send(null);
  56. }
  57. GetShouts();
  58. setInterval("GetShouts()", 1000);
  59. function saveData()
  60. {
  61. xmlHttp = GetXmlHttpObject()
  62. if (xmlHttp == null)
  63. {
  64. alert ("Browser does not support HTTP Request")
  65. return
  66. }
  67.  
  68. xmlHttp.open('POST', 'zal_art.php');
  69. xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  70. xmlHttp.send('&name=' + document.shout.name.value + '&shout=' + document.shout.message.value);
  71. //document.shout.name.value is the field the user would enter their name there's also one for the message field do this for every input you have.
  72. document.shout.message.value = '';
  73. document.shout.message.focus();
  74.  
  75. xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');
  76. xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2');
  77. }
  78.  
  79. </script>


Problem jest z linijką:
  1. setInterval("GetShouts()", 1000);


Ma ktoś pomysł, jak przerobić skrypt, żeby w zależności od tego czy są rekordy w bazie danych, czy ich nie ma, odświeżał się lub nie (lub odświeżał się co inną ilość czasu).

Ten post edytował brutal1985 24.01.2012, 18:14:26
Go to the top of the page
+Quote Post
strife
post 30.01.2012, 14:59:42
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Jak rozumiem ta zmienna:

  1. xmlHttp.responseText


Zawiera dane, które otrzymujesz (jakieś tam rekordy) tak? Jeżeli tak to sprawdzaj js'em czy ta zmienna jest pusta / czy coś zawiera (np. z poziomu serwera, możesz zrobić warunek, że gdy brak rekordów to wyświetl xml'a z jednym konkretnym wierszem określającym brak rekordów, a potem go szukać js'em).

Metoda GetShouts() powinna mniej więcej zachowywać się tak:

1. Jeden duży warunek sprawdzający czy nie istnieje jakiś div, w ciele tego warunku Twój dotychczasowy kod. (np. (if (! $('#hasRecords').length > 0)) - jquery)
2. Jeżeli zmienna xmlHttp.responseText nie będzie nic zawierać to dodaj div'a o jakimś id (sprawdzaliśmy czy ten div nie istnieje punkt wyżej, np. #hasRecords, $('body').append('<div id="hasRecords"></div>'); - jquery), teraz jeżeli istnieje to nie będzie się wykonywał kolejny request.



--------------------
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: 26.05.2024 - 15:11