Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] Ponowne wywołanie skryptu po otrzymaniu odpowiedzi z serwera
Forum PHP.pl > Forum > XML, AJAX
rozny
Witam,

wywołuję w <body onload> skrypt AJAX wysyłający zapytanie do pliku php. Po otrzymaniu odpowiedzi chcę ponownie wywołać ten skrypt. Oto kod:

  1. function wyslijDane() {
  2.  
  3. xmlhttp = typeof XMLHttpRequest == "undefined" ? new ActiveXObject('Microsoft.XMLHttp'):new XMLHttpRequest();
  4.  
  5. var distList = document.getElementById("dist_list").value;
  6. var selectTemplate = document.getElementById("select_template").value;
  7. var postSubject = document.getElementById("subject").value;
  8. var postContent = document.getElementById("tresc").value;
  9.  
  10. var url = "send_newsletter.php";
  11. var params = "dist_list=" + encodeURIComponent(distList) + "&";
  12. params += "select_template=" + encodeURIComponent(selectTemplate) + "&";
  13. params += "subject=" + encodeURIComponent(postSubject) + "&";
  14. params += "tresc=" + encodeURIComponent(postContent);
  15.  
  16. document.getElementById("head").innerHTML= "Wysyłanie newslettera...<br />";
  17.  
  18. xmlhttp.open("POST",url,true);
  19. xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  20. xmlhttp.send(params);
  21. xmlhttp.onreadystatechange=stateChanged;
  22.  
  23. }
  24.  
  25. function stateChanged() {
  26.  
  27. if (xmlhttp.readyState==4) {
  28.  
  29. document.getElementById("loading").style.display="none";
  30. document.getElementById("head").style.display="block";
  31. document.getElementById("head").innerHTML=xmlhttp.responseText;
  32. }
  33. }
  34.  
  35. function GetXmlHttpObject() {
  36.  
  37. if (window.XMLHttpRequest) {
  38.  
  39. return new XMLHttpRequest();
  40. }
  41.  
  42. return null;
  43.  
  44.  
  45. }


Niestety moje próby stanęły na niczym, a w googlach też nie znalazłem nic co mogłoby mi pomóc. Próbowalem w function stateChanged() wywoływać funkcję wyslijDane(); po otrzymaniu odpowiedzi z serwera, ale funkcja sie nie wykonywała. W funkcji wyslijDane() próbowałem robić rekurencję, ale też nic się nie działo po wykonaniu zapytania. Zależy mi na tym, by wyświetlać wynik każdego zakończenia pętli w pliku php, a z racji ograniczeń czasu wykonywania skryptu i ogólnie szybkości działania lepiej chyba kilkakrotnie wywołać skrypt niż mielic niewiadomo ile pętli przeładowując plik php z poziomu php... Bardzo bym prosił o pomoc, bo stoję w miejscu z robotą dry.gif

Dobra, dałem radę. Do zamknięcia.
markonix
Próbowałeś z jQuery?

  1. $.ajax({
  2. [...]
  3. success: function(data){
  4. // funkcja
  5. }


Myślę, że by zadziałało bez problemu.
rozny
nie próbowałem. nie chcę korzystać z jquery, bo w ten sposób się niczego nie nauczę.
thek
@rozny: czyli ucząc się na prawo jazdy też korzystasz z gołego podwozia i podstawowych podzespołów, bo się "niczego nie nauczysz" jadąc normalnym samochodem? wink.gif Używając jQuery i tak musisz znać choćby w podstawach JavaScript. Ale wiele żmudnych i powtarzających się rzeczy zostało tu opakowanych w gotowe funkcje. Nie ma sensu tego odrzucać w imię jakichś wzniosłych idei, które prędzej Cię zniechęcą do nauki niż zachęcą do jej pogłębiania. To nie lata 90. gdzie frameworki JS w zasadzie nie istniały.
rozny
thek - ja to doskonale rozumiem, ale w przypadku kiedy potrzebuje dosłownie raz użyć tego kodu w całym projekcie nie widzę sensu ładowania całej biblioteki z milionem funkcji, których w ogóle nie wykorzystam. doskonale zdaję sobie sprawę, że biblioteki i frameworki powstały po to żeby ułatwić programistom życie, ale to nie oznacza, że zawsze trzeba ich używać. Czasem lepiej napisać samemu to co już zostało napisane, bo będzie to mniejsze niż cała biblioteka i przy okazji nabędziemy kolejnego doświadczenia wink.gif
markonix
;)To wrzuć jQuery za pomocą Google jeżeli szkoda Ci transferu wink.gif
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
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.