Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ajax dziala tylko za pierwszym razem
Forum PHP.pl > Forum > XML, AJAX > AJAX
Lardux
na poczatku przyznam sie szczeze ze widze ajaxa pierwszy raz na oczy...

co do problemu to tak jak w temacie, mam kawalek kodu, checboxy beda w nim generowane za pomoca php, i kazdy bedzie mial inne id (202 w tym przypadku) ktore jest przekazywane do funkcji process jako parametr

  1. <script type="text/javascript" language="JavaScript" src="plik.js"></script>
  2.  
  3. </head>
  4. <form id=forma>
  5. <input type="checkbox" name="nazwa" id=202 checked=true onclick="process(202)">202</checkbox>
  6. </form>
  7. </body>
  8. </html>


oraz mam plik "plik.js" o zawartosci

  1. var xmlHttp = createXmlHttpRequestObject();
  2.  
  3. // zwraca obiekt XMLHttpRequest
  4. function createXmlHttpRequestObject()
  5. {
  6. // przechowa odwołanie do obiektu XMLHttpRequest
  7. var xmlHttp;
  8. // jeśli uruchomiony jest Internet Explorer
  9. if(window.ActiveXObject)
  10. {
  11. try
  12. {
  13. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  14. }
  15. catch (e)
  16. {
  17. xmlHttp = false;
  18. }
  19. }
  20. // jeśli uruchomiona jest Mozilla lub inne przeglądarki
  21. else
  22. {
  23. try
  24. {
  25. xmlHttp = new XMLHttpRequest();
  26. }
  27. catch (e)
  28. {
  29. xmlHttp = false;
  30. }
  31. }
  32. // zwraca utworzony obiekt lub wyświetla komunikat o błędzie
  33. if (!xmlHttp)
  34. alert("Błąd podczas tworzenia obiektu XMLHttpRequest.");
  35. else
  36. return xmlHttp;
  37. }
  38.  
  39.  
  40. function process(zam_id)
  41. {
  42.  
  43. if (xmlHttp.readyState ==4 || xmlHttp.readyState ==0)
  44. {
  45. xmlHttp.open("GET", "http://.../plik.php?zam_id=" + zam_id, true);
  46. xmlHttp.onreadystatechange = handleServerResponse;
  47. xmlHttp.send(null);
  48.  
  49. }
  50. else
  51. {
  52. setTimeout('process(' + zam_id + ')', 1000);
  53. }
  54. }
  55.  
  56.  
  57. function handleServerResponse()
  58. {
  59. if (xmlHttp.readyState == 4)
  60. {
  61. if (xmlHttp.status == 200)
  62. {
  63.  
  64. setTimeout('process("202")', 1000);
  65. }
  66. else
  67. {
  68. alert("Wystąpił błąd podczas uzyskiwania dostępu do serwera: " + xmlHttp.statusText);
  69. }
  70.  
  71.  
  72. }
  73. }


jest to praktycznie przepisany kawalek kodu z ksiazki...
po za tym mam plik "php" na serwerze, ktorego zadaniem jest zmiana statusu klikniętego checkboxa (czyli jesli ktos kliknie checkboxa o id 202, php aktualizuje rekord w bazie o id 202 - ustawia mu znacznik

nie interesują mnie wyniki czy udalo sie ustawic ten znacznik czy nie, jade w ciemno...

problem polega na tym ze ten kod dziala tylko i wyłącznie pod IE, oraz co najgorsze tylko za pierwszym kliknięciem, czyli jesli strona zaladuje sie pod IE, i kliknę tego checkboxa to rekord w bazie sie zaktualizuje, ale jak kliknę drugi raz to nic sie nie dzieje... any idea?
erix
Kod
// jeśli uruchomiony jest Internet Explorer
if(window.ActiveXObject)

Sprawdzaj najpierw istnienie XMLHttpRequest, w else daj IE.

Cytat
jest to praktycznie przepisany kawalek kodu z ksiazki...

Coś ostatnio lipne książki wychodzą, coraz więcej listingów zbabranych. No chyba, że czegoś zapomniałeś. tongue.gif

Napisz, co jest w konsoli błędów.
Lardux
no wlasnie nic nie jest, wszystko jest czyste, zadnego komunikatu o bledzie ni nic...

taka mysl mi sie nasuwa, czy musze odbierac dane od php'a? bo nie interesuje mnie nic, chce poprostu odpalic php'a z danymi argumentami i to wszystko, moze przez to sie wszystko psuje ?
erix
Cytat
chce poprostu odpalic php'a z danymi argumentam

To wywołaj go jako obrazek. winksmiley.jpg
Lardux
nie rozumiem.... jak jako obrazek? moge prosic o kawalek kodu?
Fifi209
Oj Lardux nawet tu Cię spotkam winksmiley.jpg

Kod
setTimeout('process("202")', 1000);


Czemu ustawiasz na stałe parametr ? Poza tym niech skrypt php zwraca coś np. jakiś tekst czy coś. ;d Wygeneruj html, pobierz element główny i odczytaj wiadomość. if (zmienna == 'true') { }else{ }

Fakt, że książka którą posiadasz podaje troszkę błędne przykłady... Też ją zakupiłem jakiś czas temu i borykałem się z problemami. Obecnie strona z ajax działa mi bez problemu.

Fifi209 - 19Fast64 (Zapraszam więc na gg haha.gif)

@edit
Zapomniałem, używam ajaxa do wczytywania podstron, które są w bazie. (taki system rodem z cms haha.gif)
erix
Cytat
jak jako obrazek?

No normalnie. winksmiley.jpg

  1. <img src="skrypt.php?par1=asdfdasd" alt="" />

Jeśli chodzi o samo wywołanie GET, to jest najprostsze rozwiązanie, nie wymagające żadnych dodatkowych skryptów. winksmiley.jpg
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.