Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX, PHP] Wykonywanie skryptu w kilku div'ach
Forum PHP.pl > Forum > XML, AJAX
cafepl_com
Witam,
rozpocząłem swoją zabawę z ajax'em dość niedawno i jak to bywa na samym początku - miewa się różne problemy.
Mój problem polega na tym, iż pewna operacja PHP wykonuje się w divie o nazwie poll. Ta "operacja" będzie wkrótce systemem oceniania, ale do rzeczy:
kod HTML:
  1. <h2>Operacja w jednym divie:</h2>
  2. <div id="poll">
  3. <a style="cursor: hand;" onclick="getVote('wierszyki',1,5)">TAK</a>
  4. <a style="cursor: hand;" onclick="getVote('gry',1,3)">NIE</a>
  5. </div>
  6.  
  7. <h2>Operacja w drugim divie:</h2>
  8. <div id="poll">
  9. <a style="cursor: hand;" onclick="getVote('joljol',8,3)">TAK</a>
  10. <a style="cursor: hand;" onclick="getVote('joljoljol',8,2)">NIE</a>
  11. </div>


Plik poll.js:
  1. var xmlHttp
  2.  
  3. function getVote(page, id, rate)
  4. {
  5. xmlHttp=GetXmlHttpObject()
  6. if (xmlHttp==null)
  7. {
  8. alert ("Browser does not support HTTP Request")
  9. return
  10. }
  11. var url='poll_vote.php?page='+escape(page)+'&id='+escape(id)+'&rate='+escape(rate)+''
  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 || xmlHttp.readyState=="complete")
  20. {
  21. document.getElementById("poll").
  22. innerHTML=xmlHttp.responseText;
  23. }
  24. }
  25.  
  26. function GetXmlHttpObject()
  27. {
  28. var objXMLHttp=null
  29. if (window.XMLHttpRequest)
  30. {
  31. objXMLHttp=new XMLHttpRequest()
  32. }
  33. else if (window.ActiveXObject)
  34. {
  35. objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  36. }
  37. return objXMLHttp
  38. }


Cały mój problem polega na tym, iż kiedy zagłosuję na TAK w pierwszym czy w drugim divie - operacja wykonuje się tylko w tym pierwszym. Chciałbym, aby skrypt wykonywał się w tym divie, w którym zagłosowałem na tak albo nie. Wiem, że rozwiązaniem mojego problemu jest ta linijka:
  1. document.getElementById("poll").
; tylko nie za bardzo wiem jak temu zaradzić, aby operacja wykonywała się w tym "pojemniku", w którym uprzednio zagłosowałem.

Bardzo proszę o pomoc. Z góry dziękuję.
melkorm
  1. <h2>Operacja w jednym divie:</h2>
  2. <div id="poll1">
  3. <a style="cursor: hand;" onclick="getVote('wierszyki',1,5,'poll1')">TAK</a>
  4. <a style="cursor: hand;" onclick="getVote('gry',1,3,'poll1')">NIE</a>
  5. </div>
  6.  
  7. <h2>Operacja w drugim divie:</h2>
  8. <div id="poll2">
  9. <a style="cursor: hand;" onclick="getVote('joljol',8,3,'poll2')">TAK</a>
  10. <a style="cursor: hand;" onclick="getVote('joljoljol',8,2,'poll2')">NIE</a>
  11. </div>


Kod
var xmlHttp

function getVote(page, id, rate, name)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request")
return
}
var url='poll_vote.php?page='+escape(page)+'&id='+escape(id)+'&rate='+escape(rate)+''
xmlHttp.onreadystatechange=stateChanged(name)
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged(idDiv)
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById(idDiv).
innerHTML=xmlHttp.responseText;
}
}

function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}


teoretycznie powinno zadziałać ;]
cafepl_com
Tak właśnie chciałem to rozwiązać, żeby każdy div miał inny id (pobierałbym te id z bazy). Szkoda tylko, że nie działa ten kod... gdzieś tu jest błąd.
melkorm
hm wkleiłem to do siebie wrzuciłem w funkcji "stateChanged" innertHTML poza warunek i działa bez problemu :/

może pokaż jak pobierasz te id z bazy ? i jak je wpisujesz do tej funkcji ?
cafepl_com
http://dodawane.topworld.org/ocena.html Pod tym adresem umieściłem ten system (bez bazy póki co). No i niestety nie działa. Nie wiem od czego to zależy, że u Ciebie OK a u mnie niestety nie.
elpaw
Cytat(cafepl_com @ 4.10.2008, 20:30:27 ) *
Cały mój problem polega na tym, iż kiedy zagłosuję na TAK w pierwszym czy w drugim divie - operacja wykonuje się tylko w tym pierwszym. Chciałbym, aby skrypt wykonywał się w tym divie, w którym zagłosowałem na tak albo nie. Wiem, że rozwiązaniem mojego problemu jest ta linijka:
  1. document.getElementById("poll").
; tylko nie za bardzo wiem jak temu zaradzić, aby operacja wykonywała się w tym "pojemniku", w którym uprzednio zagłosowałem.

Bardzo proszę o pomoc. Z góry dziękuję.


Nie powinieneś mieć sytuacji gdy dwa elementy mają takie samo id.

Jeśli dopiero zaczynasz pracę z ajaxem polecam Ci przyjrzeć się jQuery. Twój problem rozwiążesz raz dwa, po pierwszym tutorialu z podstaw jQuery. Kod który napisałeś będzie o wiele krótszy i przejrzysty.
melkorm
a daj zamiast :
Kod
<script src="poll.js"></script>


tak:
Kod
<script type="text/javascript" src="poll.js"></script>
cafepl_com
Niestety dalej nic. Plik PHP poll_vote.php wygląda dla informacji następująco:
  1. <?php
  2. $id = $_GET['id'];
  3. $page = $_GET['page'];
  4. $rate = $_GET['rate'];
  5. echo '' . $id . ', serwis: ' . $page . '';
  6. ?>


-----------------------------------------------------------

Rozwiązałem mój problem w następujący sposób:
  1. <script type="text/javascript">
  2. if (window.XMLHttpRequest)
  3. {
  4. ObiektXMLHttp = new XMLHttpRequest(); }
  5. else if (window.ActiveXObject)
  6. {
  7. ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  8.  
  9.  
  10. function getData(page, id, rate, cel) {
  11. if(ObiektXMLHttp)
  12. {
  13. var url='wiad.php?page='+escape(page)+'&id='+escape(id)+'&rate='+escape(rate)+''
  14. var cel = document.getElementById(cel);
  15. ObiektXMLHttp.open("GET", url);
  16.  
  17. ObiektXMLHttp.onreadystatechange = function()
  18. {
  19. if (ObiektXMLHttp.readyState == 4)
  20. {
  21. cel.innerHTML = ObiektXMLHttp.responseText;
  22. }
  23. }
  24.  
  25. ObiektXMLHttp.send(null); } } </script>
  26.  
  27. </head>
  28.  
  29. <a href="#ocen" onclick="getData('gry',2876,5,'ocen2876')">Kliknij, aby wykonać operację</a>
  30.  
  31. <div id="ocen2876"> Tutaj pojawi się wiadomosc. </div>
  32.  
  33.  
  34.  
  35. <a href="#ocen" onclick="getData('wierszyki',2877,2,'ocen2877')">Kliknij, aby wykonać operację</a>
  36.  
  37. <div id="ocen2877"> Tutaj pojawi się wiadomosc. </div>


Dziękuję za pomoc. Być może jak dokończę mój pierwszy system oceniania przy pomocy ajax to pochwalę się nim na forum (nie obiecuję). Pozdrawiam.
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.