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:
var intervalId = null;

function showProgressbar(maxSec) {
	var progressbar = jQuery("#progressbar");
	if (!progressbar.length) {
		window.scrollTo(0, 0);
		jQuery("#tartalom_kozep").prepend("<div id=\"progressbar\"></div>");
		jQuery("#progressbar").progressbar({value:0});
		intervalId = window.setInterval("showProgressbar("+maxSec+")", maxSec*100);
	} else {
		progressbar.progressbar('option', 'value', (progressbar.progressbar('option', 'value')+10)%110);
	}
}

function hideProgressbar() {
	window.clearInterval(intervalId);
	jQuery("#progressbar").remove();
}
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:
function page(href) {
	showProgressbar(3);
	jQuery.ajax({
		async:false,
		url:href,
		data:{
			rand:Math.random()
		},
		type:"POST",
		complete:function(request, status) {
			hideProgressbar();
			if (status != "success") {
				showErrorDialog(Lang.ajaxRequestErrorMessage);
			} else {
				jQuery("#kozep").html(request.responseText);
			}
		}
	});
}
(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