Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysłanie wartości GET'em działa, AJAX'em nie zawsze
Forum PHP.pl > Forum > XML, AJAX > AJAX
kilab
Witam, na wstępie wspomnę tylko, że z AJAX'em, jak i z samym JS nie mam wiele do czynienia, kiedy muszę to się douczam po trochu smile.gif

Tym razem mam problem z przesłaniem wartości za pomocą AJAX'a. Zrobiłem ocenianie komentarzy (+/-), w bazie zapisuje id komentarza, id uzytkownika i jego ocenę. Jeśli wywołuję adres ręcznie, tj. strona.pl/komentarze/$ocena/$id_komentarza, np. strona.pl/komentarze/plus/5 to prawidłowo zapisuje do bazy. Zarówno w przypadku dania plusa, jak i minusa. Przy pomocy AJAX'a działa tylko minus jeśli nie ma jeszcze żadnej oceny dla danego komentarza. Klikanie w plus powoduje tylko zwiększanie się wartości przy ocenie komentarza na stronie ale w bazie nic się nie dodaje i po odświeżeniu strony pokazuje znów 0. Jeśli kliknę najpierw minus, czyli będzie już ocena dla tego komentarza, to i plus zaczyna działać. Nie mam pojęcia w czym jest problem wstydnis.gif

Stworzyłem do głosowania prostą funkcję, którą zamieszczam poniżej. Proszę nie zwracać uwagi na sposób wyświetlania oceny po kliknięciu bo na razie to rozwiązanie tymczasowe smile.gif Zastanawiam się nad czymś innym.
[JAVASCRIPT] pobierz, plaintext
  1. function glosuj(id, vote){
  2. var xmlhttp;
  3. var ocena;
  4.  
  5. if (window.XMLHttpRequest){
  6. xmlhttp=new XMLHttpRequest();
  7. }else if (window.ActiveXObject){
  8. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  9. }else{
  10. alert("Twoja przeglądarka nie wspiera technologii XMLHTTP!");
  11. }
  12.  
  13.  
  14. xmlhttp.onreadystatechange=function(){
  15. if(xmlhttp.readyState==4){
  16. ocena = document.getElementById('ocena_'+id).innerHTML;
  17. ocena = parseFloat(ocena);
  18.  
  19. if(vote == 'plus')
  20. ocena = ocena+1;
  21. else if(vote == 'minus')
  22. ocena = ocena-1;
  23.  
  24. if(xmlhttp.responseText == 'true')
  25. document.getElementById('ocena_'+id).innerHTML = ocena;
  26. }
  27. }
  28.  
  29.  
  30. xmlhttp.open('GET', 'komentarz/'+vote+'/'+id, false);
  31. xmlhttp.send(null);
  32.  
  33. }
[JAVASCRIPT] pobierz, plaintext
mortus
JavaScript wygląda dobrze, a jak wygląda plik (skrypt), który żądanie przetwarza?
kilab
Mam nadzieję, że jednak mimo mojego przekonania, błąd jest w PHP smile.gif

  1. public function plusAction(){
  2. if($this->ses->get('zalogowany') > 0){
  3. $id_komentarza = sf_request::instance()->param(2);
  4. $id_uzytkownika = $this->ses->get('id_uzytkownika');
  5.  
  6. if($id_komentarza == null)
  7. sf_controller::redirect(sf_url::site('/'));
  8.  
  9. if($this->komentarze->czyIstniejeKomentarz($id_komentarza) != null){
  10. if($this->komentarze->sprawdzOcene($id_komentarza, $id_uzytkownika) != null){
  11. if($this->komentarze->sprawdzOcene($id_komentarza, $id_uzytkownika)->wartosc == '1'){
  12. echo 'false';
  13. }elseif($this->komentarze->sprawdzOcene($id_komentarza, $id_uzytkownika)->wartosc == '-1'){
  14. $this->komentarze->aktualizujOcene($id_komentarza, $id_uzytkownika, '1');
  15. echo 'true';
  16. }
  17. }else{
  18. $this->komentarze->dodajPlus($id_komentarza, $id_uzytkownika);
  19. echo 'true';
  20. }
  21. }
  22. }else{
  23. sf_controller::redirect(sf_url::site('/'));
  24. }
  25. }
  26.  
  27. public function minusAction(){
  28. if($this->ses->get('zalogowany') > 0){
  29. $id_komentarza = sf_request::instance()->param(2);
  30. $id_uzytkownika = $this->ses->get('id_uzytkownika');
  31.  
  32. if($id_komentarza == null)
  33. sf_controller::redirect(sf_url::site('/'));
  34.  
  35. if($this->komentarze->czyIstniejeKomentarz($id_komentarza) != null){
  36. if($this->komentarze->sprawdzOcene($id_komentarza, $id_uzytkownika) != null){
  37. if($this->komentarze->sprawdzOcene($id_komentarza, $id_uzytkownika)->wartosc == '1'){
  38. $this->komentarze->aktualizujOcene($id_komentarza, $id_uzytkownika, '-1');
  39. echo 'true';
  40. }elseif($this->komentarze->sprawdzOcene($id_komentarza, $id_uzytkownika)->wartosc == '-1'){
  41. echo 'false';
  42. }
  43. }else{
  44. $this->komentarze->dodajMinus($id_komentarza, $id_uzytkownika);
  45. echo 'true';
  46. }
  47. }
  48. }else{
  49. sf_controller::redirect(sf_url::site('/'));
  50. }
  51. }


Ojej, jakie wielkie tabulacje tu wstawiło, przepraszam sad.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.