ugrás a tartalomhoz

XMLHttpRequest div.style.visible Firefox

takkermeister · 2007. Május. 22. (K), 21.47
Sziasztok!

A helyzet a következő:
Van egy HTML oldalam, amin van egy DIV, ami alapértelmezésként (az oldal betöltésekor) nem látható (visibility = 'hidden').
Ez a DIV egyébként egy részben áttetsző, az oldalt kitakaró DIV. Továbbá be van állítva egy animált gif, mint háttérkép erre a div-re.

Van egy függvényem, amit az oldalon található gomb lenyomásakor hívok meg.

Ez a függvény megjeleníti a div-et (visibility = 'visible'), létrehoz egy XMLHttprequest objektumot, ami aszinkron módon meghív egy url-t.
Az objektum onreadystatechange eseményéhez hozzá van rendelve egy másik függvény, ami kezeli a visszatérő adatokat.

Ennek alényege az lenne, hogy mikor rákattintok a gombra az oldalon, megjelenik ez a div, kitakarva az oldalt, és a rajta lévő animált gif látszana, amíg az XMLHttprequest letölti az adatokat. Amint az adatok letöltésre kerültek a háttérképet eltűntetem, majd a a div-et eltűntetem.

A gond azzal van, hogy Firefox alatt (windows-on próbáltam) a div már csak akkor jelenik meg, miután az XMLHttprequest objektum letöltötte az adatokat, addig nem. IE-ben pont azt csinálja, amit szeretnék.

Szívesen venném az ötleteket, mert ezt most nem értem.

Köszönöm
 
1

SJAX

vbence · 2007. Május. 23. (Sze), 09.47
Fura, hogy visbibility=hidden-nel dolgozol, nem pedig display:none-nal. A kitakarásnak akkor lenne értelme, ha asziknron módon kérdeznél le az XMLHTTPvel. Gondolom nem ezt teszed, ilyenkor gyakorlatilag fagy a böngésző amég nem jön meg a válasz. Ha ezt csinálod az nagyon ellenszenves megoldás...
2

pedig de :)

takkermeister · 2007. Május. 23. (Sze), 09.59
A display:none, és display:block-al is próbálkoztam már, a végeredményt tekintve nincs hatással a dologra.

Az XMLHttp-vel pedig aszinkron módon kérdezek le, de ezt írtam is a kérdés felvetésekor
3

kódrészlet?

Táskai Zsolt · 2007. Május. 23. (Sze), 10.18
az ajaxos, előtűntetős szekvencia még segíthete...
4

Egy kis kódrészlet

takkermeister · 2007. Május. 23. (Sze), 10.32

function sendinfo(element) {

    wpanel= document.getElementById(element);
    wpanel.style.visibility = 'visible';

	var req = null;
	if(window.XMLHttpRequest) {
		req = new XMLHttpRequest(); 
	}
	else if (window.ActiveXObject)
		req  = new ActiveXObject('Microsoft.XMLHTTP');    
		
	var url = 'xyz.php';
	req.onreadystatechange = function () {
		if (req.readyState == 4) {
			if (req.status == 200){
				var response_array = req.responseText.split("!!!<<<>>>!!!");
				var codeToInsert = response_array[0];
				var jsCode = response_array[1];
				eval(jsCode);
				wpanel.style.backgroundImage = 'none';
				wpanel.innerHTML = codeToInsert;
			}
			else{
				wpanel.style.backgroundImage = 'none';
				wpanel.innerHTML = 'Hiba a letöltéskor';
			}
		}
	}
	req.open('GET', url);
	req.send(null);
}
5

Firefox

vbence · 2007. Május. 23. (Sze), 11.39
Milyen firefox, és mit csinál erre?
    req.open('GET', url, true);
6

firefox

takkermeister · 2007. Május. 23. (Sze), 12.40
Firefox 2.0.0.3.

Egyébként eredetileg ez volt a hívás, amit írtál:
req.open('GET', url, true);
Pontosan ugyanez a jelenség, mint a mostaninál:
req.open('GET', url);
Ezért vettem ki a true paramétert, mert a w3c specifikációja szerint ez az alapértelmezett érték, ha nincs kitöltve. De mint mondtam kipróbáltam így is, és semmi változás
9

áááááá

takkermeister · 2007. Május. 25. (P), 11.00
Hát nem hiszem el. Visszaírtam a true paramétert és működik. Pedig esküdni mernék rá, hogy így is próbáltam, mivel ez volt az eredeti kód. Nem is értem.
Nem az első eset, amikor azért szívok valamivel, mert az alapértelmezett értékeket az egyik böngésző így, másik meg úgy értékeli.
10

igen...

vbence · 2007. Május. 25. (P), 11.42
a munkánk legszebb része :) Megjegyzem, nálam a Maces firefox (2.0.0.3) a true-t veszi alapértelmezettnek. Lehet, hogy a doctype-tól is függ :D
7

hüle debugolás

ksgy · 2007. Május. 23. (Sze), 16.14
Lehet hülyeség lesz, de sztem érdemes megpróbálni, hogy teszel egy sima alertet a wpanel.style.visibility = 'visible'; után, így lesz ideje annak is lefutni. Szerintem is az lehet a problem, hogy "túl gyorsan" fut le a kód, és nincs ideje a bögészőnek megjeleníteni a divet, mikorra már a xmlhttprequestel van elfoglalva, ami elég cpu zabalo dolog tud lenni.
Ha az alert "lelassitja" annyira a dolgot, hogy el tud tunni, es nem tul fontos, hogy azonnal megjelenjen a tartalom (pl belefer 1-2-3 tizedmasodperces keses) akkor tedd egy setTimeout-ba a xmlhttprequestet ugy ahogy van.. :)
8

settimeout

takkermeister · 2007. Május. 24. (Cs), 09.37
Igen, ez segít rajta, nekem is eszembe jutott, és ki is próbáltam.
Csak egyszerűen nem akartam elhinni, hogy máshogy nem lehet megcsinálni. De ha nem marad más, akkor ez lesz