Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z funkcją js/ajax
Forum PHP.pl > Forum > Po stronie przeglądarki
bagsiur
Nie do końca wiedziałem w jakim dziale umieścić temat.

Mam problem z jedną funkcją w js, z nieznanego mi powodu funkcja nie zwraca wartości. Oto kod:

[JAVASCRIPT] pobierz, plaintext
  1. var XMLHttpRequestObject_postep = false;
  2.  
  3. if (window.XMLHttpRequest){
  4. XMLHttpRequestObject_postep = new XMLHttpRequest();
  5. }
  6. else if (window.ActiveXObject){
  7. XMLHttpRequestObject_postep = new ActiveXObject("Microsoft.XMLHTTP");
  8. }
  9.  
  10. function postep(){
  11. if(XMLHttpRequestObject_postep){
  12. XMLHttpRequestObject_postep.open("GET", "postep.php");
  13. XMLHttpRequestObject_postep.onreadystatechange = function(){
  14. if(XMLHttpRequestObject_postep.readyState==4 && XMLHttpRequestObject_postep.status == 200){
  15. var prog = parseInt(XMLHttpRequestObject_postep.responseText);
  16. return prog;
  17. }
  18. }
  19. XMLHttpRequestObject_postep.send(null);
  20. }
  21. }
[JAVASCRIPT] pobierz, plaintext


Może jeszcze wytłumaczę o co mi chodzi. Piszę progressbar dla swojego skryptu php wysyłającego maile. Przy każdym obrocie pętli zwiększam zmienną sesyjną. Z kolei progresbar który uruchamia się przy starcie skryptu pobiera sobie aktualny postęp za pomocą tej funkcji która tak naprawdę podaje tylko zmienną sesyjną. Czy to dobry sposób myślenia? Zawsze jest możliwość napisać coś takiego przy pomocy flush()...

Skrypt i funkcja uruchamiają się po wysłaniu formularza z mailem w ten sposób:
  1. <input onclick="test();" name="wyslij" style="cursor: pointer;" class="wyslij" type="submit" value="Wyślij" />


Dodam jeszcze że wynik jest zapisany w zmiennej prog. Np. alert(prog); zwraca poprawny wynik

Z góry dzięki za pomoc i wyrozumiałość...
#luq
Nie rozumiesz idei asynchroniczności, operacji na zdarzeniach...
Masz return w zdarzeniu readystatechange pomyśl dlaczego nie działa.
krowal
onreadystatechange jest wywoływane przy pewnym zdarzeniu i jest to robione automatycznie, nie wywołasz tego ręcznie a co za tym idzie nie otrzymasz zwracanej wartości, ta funkcja nie powinna nic zwracać bo wyniku nie da się przechwycić. Jeśli chcesz tą wartość gdzieś zapisać to musisz to zrobić wewnątrz tej funkcji. Nie wiem czy wiesz co to jest zasięg zmiennych itp. możesz zrobić tak:
[JAVASCRIPT] pobierz, plaintext
  1. var XMLHttpRequestObject_postep = false;
  2.  
  3. if (window.XMLHttpRequest){
  4. XMLHttpRequestObject_postep = new XMLHttpRequest();
  5. }
  6. else if (window.ActiveXObject){
  7. XMLHttpRequestObject_postep = new ActiveXObject("Microsoft.XMLHTTP");
  8. }
  9. var prog = null;
  10. function postep(){
  11. if(XMLHttpRequestObject_postep){
  12. XMLHttpRequestObject_postep.open("GET", "postep.php");
  13. XMLHttpRequestObject_postep.onreadystatechange = function(){
  14. if(XMLHttpRequestObject_postep.readyState==4 && XMLHttpRequestObject_postep.status == 200){
  15. prog = parseInt(XMLHttpRequestObject_postep.responseText);
  16. }
  17. }
  18. XMLHttpRequestObject_postep.send(null);
  19. }
  20. }
[JAVASCRIPT] pobierz, plaintext
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.