Na stronce wykonuje 2 rzeczy za pomoca ajaxa: komentarze i głosowanie. Dziwi mnie to, że po wykonaniu jakiegoś działania ajax "myli" się i nie bierze tego obrazka co potrzeba (po głosowaniu wychodzi glos przyjęty a po dodaniu komentarza powinno dać komentarz dodany) a on mi wyrzuca tylko i wylacznie komentarz dodany nawet kiedy głosuje. Dodatkowo Wyświetla obrazki tam gdzie nie powinien (wyświetla obrazek i grafe loadingu w polu komentarza gdy głosuje). Divy na stronie mam ok , wydaje mi sie ze to wina kodu js. zobaczcie sami (przepisany kod z książki i zmodyfikowany):

  1. // przechowuje odwołanie do obiektu XMLHttpRequest
  2. var xmlHttp = createXmlHttpRequestObject();
  3.  
  4. // zwraca obiekt XMLHttpRequest
  5. function createXmlHttpRequestObject()
  6. {
  7. // przechowa odwołanie do obiektu XMLHttpRequest
  8. var xmlHttp;
  9. // jeśli uruchomiony jest Internet Explorer
  10. if(window.ActiveXObject)
  11. {
  12. try
  13. {
  14. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  15. }
  16. catch (e)
  17. {
  18. xmlHttp = false;
  19. }
  20. }
  21. // jeśli uruchomiona jest Mozilla lub inne przeglądarki
  22. else
  23. {
  24. try
  25. {
  26. xmlHttp = new XMLHttpRequest();
  27. }
  28. catch (e)
  29. {
  30. xmlHttp = false;
  31. }
  32. }
  33. // zwraca utworzony obiekt lub wyświetla komunikat o błędzie
  34. if (!xmlHttp)
  35. alert("Błąd podczas tworzenia obiektu XMLHttpRequest.");
  36. else
  37. return xmlHttp;
  38. }
  39.  
  40. // wysyła asynchroniczne żądanie protokołem HTTP korzystając z obiektu XMLHttpRequest
  41. function process()
  42. {
  43. // kontynuuje jedynie jeśli obiekt xmlHttp nie jest zajęty
  44. if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
  45. {
  46.  
  47. // pobiera imię wpisane przez użytkownika w formularzu
  48. name = encodeURIComponent(document.getElementById("myName").value);
  49. song = encodeURIComponent(document.getElementById("song").value);
  50. u = encodeURIComponent(document.getElementById("u").value);
  51. // wykonuje stronę quickstart.php na serwerze
  52. xmlHttp.open("GET", "quickstart.php?name=" + name + "&song=" + song + "&u=" + u, true);
  53. // definiuje metodę obsługi odpowiedzi serwera
  54. xmlHttp.onreadystatechange = handleServerResponse;
  55. // wysyła żądanie do serwera
  56. xmlHttp.send(null);
  57.  
  58. }
  59. else
  60. // jeśli połączenie jest zajęte, ponawia próbę po 1 sekundzie
  61. setTimeout('process()', 1000);
  62. }
  63.  
  64. // wykonywana automatycznie po otrzymaniu odpowiedzi z serwera
  65. function handleServerResponse()
  66. {
  67. myDiv = document.getElementById("myDivElement");
  68. if (xmlHttp.readyState == 1 || xmlHttp.readyState == 2 || xmlHttp.readyState == 3 )
  69. {
  70. document.getElementById("divMessage").innerHTML = "<img src='obrazki/load.gif'>";
  71. }
  72.  
  73. // kiedy status readyState wynosi 4, odczytujemy odpowiedź serwera
  74. else if (xmlHttp.readyState == 4)
  75. {
  76.  
  77. // status 200 oznacza pomyślne ukończenie transakcji
  78. if (xmlHttp.status == 200)
  79. {
  80. // wyodrębnia wiadomość XML wysłaną z serwera
  81. xmlResponse = xmlHttp.responseXML;
  82. // pobiera element nadrzędny ze struktury pliku XML
  83. xmlDocumentElement = xmlResponse.documentElement;
  84. // pobiera wiadomość tekstową pierwszego potomka elementu document
  85. helloMessage = xmlDocumentElement.firstChild.data;
  86. // aktualizuje dane wyświetlane klientowi informacjami otrzymanymi z serwera
  87. document.getElementById("divMessage").innerHTML = '<i>' + helloMessage + '</i>';
  88. // ponawia sekwencję
  89.  
  90.  
  91. }
  92. // dla statusu protokołu HTTP innego niż 200 zgłasza błąd
  93. else
  94. {
  95. alert("Wystąpił błąd podczas uzyskiwania dostępu do serwera: " + xmlHttp.statusText);
  96. }
  97. document.getElementById("divMessage").innerHTML = "<img src='obrazki/glosprzyjety.png'>";
  98. }
  99. }
  100.  
  101. ////////2222222222222///////////
  102. function komcio()
  103. {
  104.  
  105. // kontynuuje jedynie jeśli obiekt xmlHttp nie jest zajęty
  106. if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
  107. {
  108.  
  109. // pobiera imię wpisane przez użytkownika w formularzu
  110.  
  111. komentarz = encodeURIComponent(document.getElementById("komentarz").value);
  112. song_id = encodeURIComponent(document.getElementById("song_id").value);
  113. user = encodeURIComponent(document.getElementById("user").value);
  114. // wykonuje stronę quickstart.php na serwerze
  115.  
  116. xmlHttp.open("GET", "komencik.php?komentarz=" + komentarz + "&song_id=" + song_id + "&user=" + user, true);
  117. // definiuje metodę obsługi odpowiedzi serwera
  118. xmlHttp.onreadystatechange = handleServerResponse;
  119. // wysyła żądanie do serwera
  120. xmlHttp.send(null);
  121.  
  122. }
  123. else
  124. // jeśli połączenie jest zajęte, ponawia próbę po 1 sekundzie
  125. setTimeout('komcio()', 1000);
  126. }
  127.  
  128. // wykonywana automatycznie po otrzymaniu odpowiedzi z serwera
  129. function handleServerResponse()
  130. {
  131. myDiv = document.getElementById("elemencik");
  132. if (xmlHttp.readyState == 1 || xmlHttp.readyState == 2 || xmlHttp.readyState == 3 )
  133. {
  134. document.getElementById("wiadomosc").innerHTML = "<img src='obrazki/load.gif'>";
  135. }
  136.  
  137. // kiedy status readyState wynosi 4, odczytujemy odpowiedź serwera
  138. else if (xmlHttp.readyState == 4)
  139. {
  140.  
  141. // status 200 oznacza pomyślne ukończenie transakcji
  142. if (xmlHttp.status == 200)
  143. {
  144. // wyodrębnia wiadomość XML wysłaną z serwera
  145. xmlResponse = xmlHttp.responseXML;
  146. // pobiera element nadrzędny ze struktury pliku XML
  147. xmlDocumentElement = xmlResponse.documentElement;
  148. // pobiera wiadomość tekstową pierwszego potomka elementu document
  149. helloMessage = xmlDocumentElement.firstChild.data;
  150. // aktualizuje dane wyświetlane klientowi informacjami otrzymanymi z serwera
  151. document.getElementById("wiadomosc").innerHTML = '<i>' + helloMessage + '</i>';
  152. // ponawia sekwencję
  153.  
  154.  
  155. }
  156. // dla statusu protokołu HTTP innego niż 200 zgłasza błąd
  157. else
  158. {
  159. alert("Wystąpił błąd podczas uzyskiwania dostępu do serwera: " + xmlHttp.statusText);
  160. }
  161. document.getElementById("wiadomosc").innerHTML = "<img src='obrazki/komcio_ok.png'>";
  162. }
  163.  
  164. }