Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wysłanie wartości GET'em działa, AJAX'em nie zawsze
kilab
post
Post #1





Grupa: Zarejestrowani
Postów: 180
Pomógł: 19
Dołączył: 4.11.2007

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


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


JavaScript wygląda dobrze, a jak wygląda plik (skrypt), który żądanie przetwarza?
Go to the top of the page
+Quote Post
kilab
post
Post #3





Grupa: Zarejestrowani
Postów: 180
Pomógł: 19
Dołączył: 4.11.2007

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


Mam nadzieję, że jednak mimo mojego przekonania, błąd jest w PHP (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/sad.gif)

Ten post edytował kilab 13.09.2011, 17:13:55
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 14:00