Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Zatrzymać pętle aby dokończył funkcję
Forum PHP.pl > Forum > Przedszkole
ewelinac18
Witam w jaki sposób można zatrzymać pętle tak aby najpierw ukończyła jedną funkcję a potem wzięła się za następną a nie wszystkie naraz ?

  1. function klik(){
  2. for (var x = 0;x <= parseInt($("#upload_sum").val()); x++) {
  3. if($("#upload_file_"+x).val() != '') {
  4.  
  5.  
  6. ajaxFileUpload($("#upload_foto_"+x).val(),x); <- ukończ tą funkcję a potem może dalej ruszać
  7.  
  8.  
  9. }
  10.  
  11. }
  12.  
  13. return false;
  14. }
tomekmvr
nie zabrdzo rozumiem co chcesz osiągnąć

u ciebie wykonuje się pętla for jeśli warunek if jest spełniony wywołuje funkcje ajaxFileUpload, która się wykonuje w całości i znowu wykonuje się pętla. Jeśli chcesz zatrzymać pętlę aby funkcja ajaxFileUploadfor wywołała się raz daj po niej break;
bastard13
Jezeli ajaxFileUpload() zwraca jakąś wartość, to możesz spróbować:
  1. while(ajaxFileUpload()!=wartosc_w_przypadku_sukcesu) {}

ale z tego co kojarze, to takie coś się wysypuje.
Ogólnie, to nie ma żadnego sposobu na 'zawieszenie' działania skryptu, ewentualnie możesz używać pętli w taki sposób jak powyżej.
Możesz też zmienić skrypt na coś takiego:
  1. var max_value=false;
  2. var what_i_do_now=0;
  3.  
  4. function klik(){
  5. if(max_value==false)
  6. //jeżeli zmienna nie zainicjowana, to zapisuje w niej twoją wartość maksymalną
  7. { max_value=parseInt($("#upload_sum").val());}
  8.  
  9. //jak pseudo-pętla się kończy, to funkcja zwraca false
  10. if(max_value==what_i_do_now)
  11. { return false; }
  12.  
  13. if($("#upload_file_"+what_i_do_now).val() != '')
  14. { //to wywołanie twojej funkcji
  15. ajaxFileUpload($("#upload_foto_"+x).val(),x);
  16. }
  17. else
  18. {what_i_do_now++; //kolejny element
  19. klik(); //ponowne wykonanie funkcji
  20. }
  21. }

a w ajaxFileUpload po otrzymaniu wyniku i instrukcjach, które wykonujesz, dodaj:
  1. what_i_do_now++; //kolejny element
  2. klik(); //ponowne wykonanie funkcji

I dzięki temu będziesz miała pętle, która przechodzi do następnego kroku jeżeli if($("#upload_file_"+what_i_do_now).val() != '') zwróci false lub, gdy wykona się funkcja ajaxFileUpload:)
everth
Możesz spróbować też dostosować ten skrypt poniżej. Nie testowałem go, ani nie bardzo wiem co ta twoja funkcja robi
[JAVASCRIPT] pobierz, plaintext
  1. function ajaxupload(twojezmienne) {
  2. function pauseByLock(lock,t) {
  3. var free = window.setTimeOut(function() {lock=false;},t);
  4. while (lock) {return;} //wchodzimy w pętlę
  5. window.clearTimeout(free);
  6. }
  7. var lock = true
  8. $.post('jakiśadres',jakiesdane,function() {lock=false;}) //twoje zapytanie - nie wiem jak wygląda - w callbacku musisz po prostu ustawić lock na false
  9. pauseByLock(lock,5000); //teoretycznie powinno wstrzymać wykonanie do czasu zdjęcia blokady lub upłynięcia 5 sekund
  10. return cosik;
  11. }
[JAVASCRIPT] pobierz, plaintext
Crozin
Żądanie (AJAX) wysyłasz asynchronicznie, czyli po wywołaniu funkcji nie czeka się na zakończenie jej działania. Nie znamy jej kodu więc wiele powiedzieć się nie da, co najwyżej:

1. Funkcja ta powinna odpalać jakiegoś callbacka, po wykonaniu żądania
2. W callbacku tym, powinieneś ponownie odpalić fragment wysyłający żądanie - tym razem dla następnego elementu - i tak w kółko.

Innymi słowy: najprawdopodobniej będziesz musiał zrezygnować z pętli. Może to wyglądać jakoś tak:
[JAVASCRIPT] pobierz, plaintext
  1. function doSth(id) {
  2. if (id == 0) {
  3. return;
  4. }
  5.  
  6. ajaxFileUpload($("..." + id), function() {
  7. // callback
  8. doSth(id - 1);
  9. });
  10. };
  11.  
  12. doSth(pasrseInt($("...").val()));
[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.