Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ajax problem z wielokrotnie wykonywaną funkcją
Forum PHP.pl > Forum > XML, AJAX
Xardian
posiadam takie 2 pliczki
  1. var http_request = false;
  2. function makePOSTRequest(url, parameters, diva) {
  3. http_request = false;
  4.  
  5. if (window.XMLHttpRequest) {
  6. http_request = new XMLHttpRequest();
  7. if (http_request.overrideMimeType) {
  8. http_request.overrideMimeType('text/html');
  9. }
  10. } else if (window.ActiveXObject) {
  11. try {
  12. http_request = new ActiveXObject("Msxml2.XMLHTTP");
  13. } catch (e) {
  14. try {
  15. http_request = new ActiveXObject("Microsoft.XMLHTTP");
  16. } catch (e) {}
  17. }
  18. }
  19.  
  20. http_request.onreadystatechange = function(){
  21. if (http_request.readyState == 1) {
  22. document.getElementById(diva).innerHTML = "Ładowanie...";
  23.  
  24. }
  25. if (http_request.readyState == 4) {
  26. if (http_request.status == 200) {
  27. result = http_request.responseText;
  28. document.getElementById(diva).innerHTML = result;
  29. czas();
  30.  
  31. }
  32. else {
  33. document.getElementById(diva).innerHTML = "Wystąpił błąd!";
  34. }
  35. }
  36. };
  37.  
  38. http_request.open('POST', url, true);
  39. http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  40. http_request.send(parameters);
  41.  
  42. }

jak łatwo można zauważyc dodałem wywołanie funkcji czas() i tu jest własnie problem, ponieważ po kliknięciu w jakikolwiek link z jaxem uruchomione funkcje czas() mnożą się powodując efekt zbyt szybkiego wykonywania :/
  1. function czas()
  2. {
  3. liczba = document.getElementById('czasq').value;
  4.  
  5. sec = liczba % 60;
  6. liczba = liczba - sec;
  7. min =( liczba % 3600)/60 ;
  8. liczba = liczba - min * 60;
  9. god = liczba /3600;
  10.  
  11. document.getElementById('godz').innerHTML=god;
  12. document.getElementById('min').innerHTML=min;
  13. document.getElementById('sec').innerHTML=sec;
  14.  
  15. odliczaj();
  16.  
  17.  
  18. }
  19. function odlicz(){
  20. cc= 1;
  21. if(god == 0 && min == 0 && sec == 0)
  22. {
  23. document.getElementById('czas').innerHTML='zakończono';
  24. }
  25. else
  26. {
  27. setTimeout(function() { odliczaj(); } ,1000);
  28. }};
  29.  
  30. function odliczaj()
  31. {
  32. if(sec > 0)
  33. {
  34. sec=sec - 1 ;
  35. }
  36. else
  37. {
  38.  
  39. sec = 59;
  40.  
  41. if(min > 0)
  42. {
  43. min=min - 1 ;
  44. }
  45. else
  46. {
  47. if(god > 0){
  48. god = god -1;
  49. min = 59;
  50. };};};
  51. document.getElementById('godz').innerHTML=god;
  52. document.getElementById('min').innerHTML=min;
  53. document.getElementById('sec').innerHTML=sec;
  54. setTimeout("odlicz()" ,0);
  55. }


ma ktoś pomysł jak to zablokować żeby tylko 1 raz czas() działał w danej chwili lub gdzie go umieścić ;/
z niewiadomych przyczyn ten skrypt niedziala pod IE a pod mozillii śmig ale się wielokrotnie ładuje -.-
Anatejms
dzieje sie tak zapewne dlatego ze wywolania sa co 1s i sie zapentalaja. uzyj identyfikatora do funkcji setTimeout i pozniej zeruj funkcje przy uzyciu clearTimeout('identyfikator'). a poza tym nie wiem po co uzywasz setTimeout("odlicz()" ,0); to toz ci niezle zamula skrypt tongue.gif napisz po prostu odlicz();

nie testowalem ale tak powinno działać
  1. function czas()
  2. {
  3. liczba = document.getElementById('czasq').value;
  4.  
  5. sec = liczba % 60;
  6. liczba = liczba - sec;
  7. min =( liczba % 3600)/60 ;
  8. liczba = liczba - min * 60;
  9. god = liczba /3600;
  10.  
  11. document.getElementById('godz').innerHTML=god;
  12. document.getElementById('min').innerHTML=min;
  13. document.getElementById('sec').innerHTML=sec;
  14.  
  15. odliczaj();
  16.  
  17.  
  18. }
  19. function odlicz(){
  20. cc= 1;
  21. if(god == 0 && min == 0 && sec == 0)
  22. {
  23. document.getElementById('czas').innerHTML='zakończono';
  24. }
  25. else
  26. {
  27. weit= setTimeout('odliczaj()' ,1000);
  28. }};
  29.  
  30. function odliczaj()
  31. {
  32. clearTimeout('weit');
  33. if(sec > 0)
  34. {
  35. sec=sec - 1 ;
  36. }
  37. else
  38. {
  39.  
  40. sec = 59;
  41.  
  42. if(min > 0)
  43. {
  44. min=min - 1 ;
  45. }
  46. else
  47. {
  48. if(god > 0){
  49. god = god -1;
  50. min = 59;
  51. };};};
  52. document.getElementById('godz').innerHTML=god;
  53. document.getElementById('min').innerHTML=min;
  54. document.getElementById('sec').innerHTML=sec;
  55. odlicz();
  56. }


a i dla przejzystosci kodu uzywaj wcieć (taka rada smile.gif) latwiej sie patrzy gdzie sie koncza if'y i wogole tongue.gif
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.