Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Jquery powiela połączenia
Forum PHP.pl > Forum > Przedszkole
neo1986kk
Witam , mam taki mały problem, że połączenia ajax są powielane, otóż mam taki kod:
  1.  
  2. $(document).ready(function(){
  3.  
  4.  
  5.  
  6.  
  7. (function($){
  8. $.fn.inicialize = function(){
  9. $('.window').remove(),
  10. $.ajax({
  11. type: "GET",
  12. url: "ajax/chatInit.php",
  13. type: "POST",
  14. dataType: "xml",
  15. success: function(xml) {
  16. $(xml).find('site').each(function(){
  17. alert('1'),
  18. setTimeout(function(){$(this).inicialize();},10000)
  19.  
  20.  
  21. });
  22.  
  23. }}); }})(jQuery);
  24.  
  25. $(this).inicialize();
  26.  
  27.  
  28. });
  29.  
  30.  
  31.  

i niestety działanie jest takie
ze z pierwszy razem alert wyskakuje raz, za 10 sek 2 rzy, za kolejne 10 sek 4 razy, za kolejne 8 itd... czy jest jakaś możliwość żeby to resetować ?
muk4
Ale bałagan tongue.gif Spróbuj dać
[JAVASCRIPT] pobierz, plaintext
  1. setTimeout(function(){$(this).inicialize();},10000)
  2. // zamiast:
  3. $(this).inicialize();
[JAVASCRIPT] pobierz, plaintext


Powinieneś trzymać porządek w kodzie.
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2. (function($){
  3. $.fn.inicialize = function(){
  4. $('.window').remove(),
  5. $.ajax({
  6. type: "GET",
  7. url: "ajax/chatInit.php",
  8. type: "POST",
  9. dataType: "xml",
  10. success: function(xml) {
  11. $(xml).find('site').each(function(){
  12. alert('1'),
  13. });
  14. }
  15. });
  16. }
  17. })
  18. (jQuery);
  19. setTimeout(function(){$(this).inicialize();},10000)
  20. });
[JAVASCRIPT] pobierz, plaintext
neo1986kk
tak tylko że on ma mi ten kod co 10 sekund powtarzać i setTimeout musi być w funkcji kiedy następuje success
muk4
Nie za bardzo rozumiem JQuery ale czy
setTimeout(function(){$(this).inicialize();},10000)

nie wykonuje funkcji $(this).inicialize() co 10 sekund? Nie o to chodzi?

@DOWN
A no tak tongue.gif. Cały czas myślałem o setInterval a pisałem co innego ^^. Ach te upały...
neo1986kk
nie, wykonuje ją z 10 sekundowym opóźnieniem, ale raz.

dałem tam zamiast setTimeout setInterval i juz jest okej tylko mam jeszcze jeden problem

  1. $(document).ready(function(){\
  2. time=10000; // tutaj zmiana
  3. (function($){
  4. $.fn.inicialize = function(){
  5. $('.window').remove(),
  6. $.ajax({
  7. type: "GET",
  8. url: "ajax/chatInit.php",
  9. type: "POST",
  10. dataType: "xml",
  11. success: function(xml) {
  12. $(xml).find('site').each(function(){
  13. alert('1'),
  14. time=10; // tutaj zmiana
  15. });
  16. }
  17. });
  18. }
  19. })
  20. (jQuery);
  21. setInterval(function(){$(this).inicialize();},time) // tutaj zmiana
  22. });


i teraz tak: chcialbym zeby zmienna time zmienila sie globalnie czyli zeby pozniej bylo time= 10, ale niestety zmienna pozostaje caly czas 10000
muk4
Może zamiast setInterval użyj setTimeout. Daj go na końcu funkcji i wywołaj funkcję normalnie. Wtedy funkcja będzie wykonywać siebie a ty możesz kontrolować opóźnienie.

BTW. initialize od init, nie inicialize.
neo1986kk
opóznienie moge kontrolować ale ilości wywołan już nie więc cofamy się do początku tematu czyli powielanie połączeń, setintrval czy tam settimeout nie moze być w środku funkcji, a na zewnatrz nie pobiera parametru time więc tak źle i tak nie dobrze.

Ponawiam pytanie, dlatego że problem nie został jeszcze rozwiązany: Jak resetować ilość połączeń wysyłanych do serwera za pomocą jquery?
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.