Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JS] Zatrzymać pętle aby dokończył funkcję
ewelinac18
post
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 11.07.2007

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
tomekmvr
post
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 2
Dołączył: 11.09.2006

Ostrzeżenie: (0%)
-----


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;

Ten post edytował tomekmvr 15.09.2010, 18:29:42


--------------------
Go to the top of the page
+Quote Post
bastard13
post
Post #3





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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:)


--------------------
Go to the top of the page
+Quote Post
everth
post
Post #4





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


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


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Żą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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:22