ugrás a tartalomhoz

setInterval "nem fut" AJAX kérés alatt (dinamikus jQuery progressbar)

tisch.david · 2009. Aug. 6. (Cs), 01.13
Sziasztok!

jQuery-ben szeretnék egy egyszerű progressbar-t összeütni. A "mozgást" setInterval-lal szeretném megoldani. Ez megy is az alábbi kóddal:
  1. var intervalId = null;  
  2.   
  3. function showProgressbar(maxSec) {  
  4.     var progressbar = jQuery("#progressbar");  
  5.     if (!progressbar.length) {  
  6.         window.scrollTo(0, 0);  
  7.         jQuery("#tartalom_kozep").prepend("<div id=\"progressbar\"></div>");  
  8.         jQuery("#progressbar").progressbar({value:0});  
  9.         intervalId = window.setInterval("showProgressbar("+maxSec+")", maxSec*100);  
  10.     } else {  
  11.         progressbar.progressbar('option''value', (progressbar.progressbar('option''value')+10)%110);  
  12.     }  
  13. }  
  14.   
  15. function hideProgressbar() {  
  16.     window.clearInterval(intervalId);  
  17.     jQuery("#progressbar").remove();  
  18. }  
Ha viszont egy AJAX hívás előtt hívom a showProgressbar-t, akkor amíg a válaszra vár, nem "lépteti" a progressbar-t. (Az AJAX hívás előtt kilőttem az Apache-ot, úgyhogy hosszú másodpercekig tudtam figyelni, de semmi.)

Minden tippet előre is köszönök! Üdv:
Dávid
 
1

Hiányzik

Poetro · 2009. Aug. 6. (Cs), 01.23
Már csak az AJAX hívás nem látszik, hogy lehessen következtetni, hogy miből adódik a probléma.
2

Íme

tisch.david · 2009. Aug. 6. (Cs), 09.21
Nem szerettem volna elsőre 2 mázsa kódot benyomni, hogy legyen türelmetek végigolvasni. ;) Szóval az AJAX hívás:
  1. function page(href) {  
  2.     showProgressbar(3);  
  3.     jQuery.ajax({  
  4.         async:false,  
  5.         url:href,  
  6.         data:{  
  7.             rand:Math.random()  
  8.         },  
  9.         type:"POST",  
  10.         complete:function(request, status) {  
  11.             hideProgressbar();  
  12.             if (status != "success") {  
  13.                 showErrorDialog(Lang.ajaxRequestErrorMessage);  
  14.             } else {  
  15.                 jQuery("#kozep").html(request.responseText);  
  16.             }  
  17.         }  
  18.     });  
  19. }  
(Remélem, nem az "async:false" az oka...)
3

Ezer bocs...

tisch.david · 2009. Aug. 6. (Cs), 09.27
Poetro hozzászólása ráirányította a figyelmemet az AJAX hívásra, és a doski idevágó része alapján 10 mp alatt kiderítettem, hogy tényleg az "async:false" miatt van.
Köszönöm mindenkinek, aki törte rajta a fejét! (Mellesleg: tudnátok olyan példát mondani, amikor ez a bizonyos "async:false" beállítás szükséges?)

Köszi! Üdv:
Dávid
4

Ha nem akarod

Ustak · 2009. Aug. 6. (Cs), 22.14
hogy bármi más történhessen addig, amig a hívás le nem folyik, így úgymond blokkolod a böngészőt, mint ahogy a jquery doksijában le is van írva jqery.ajax
Én még sosem használtam így.
Üdv:
Gábor.
5

Köszi

tisch.david · 2009. Aug. 6. (Cs), 22.35
azt hiszem, hogy én sem fogom többet így használni. Valójában a felhasználót akartam blokkolni az AJAX futása alatt, de ezzel a nem kívánt mellékhatással nem számoltam.
6

pontosan mit akartál blokkolni?

Ustak · 2009. Aug. 7. (P), 15.43
Jó blokkoló lehet egy transparent szürke div, amit ráhúzol az oldalra javascriptel, hasonlóan mint a thickbox-lightbox témáknál a kép háttereként megjelenő divhez, és a blokkolást megszünteted, ha kész az ajax :-)
Vagy ilyesmi.
Üdv:
Gábor.
7

Nos, igen :)

tisch.david · 2009. Aug. 7. (P), 23.11
Ez is eszembe jutott, de - gondoltam - itt van ez a frankó kis "async:false", ez pont erre való. Közbe' pedig nem is... :)
Mellesleg a hiba okán újra végig gondoltam, és úgy döntöttem, hogy mégsem kell blokkolni őket. Ha közben máshová klikkentenek, lelkük rajta. Szóval: okosabb is lettem meg bölcsebb is. ;)

Üdv:
Dávid