ugrás a tartalomhoz

Bugos képbetöltés

mizantrop · 2010. Dec. 14. (K), 18.34
Üdv!

Van adatbázisban egy számsorozatom. pl: (kartyak="2,3,4,12,4,6") Ezt onloadnál kiválasztom az adott felhasználótól és berakom egy tömbbe.
Ezekhez tartozik egy egy kép és véletlenszerűen betöltődik 5 db egymás után külön td-kbe majd kitörlődik a tömbből. Működik is csak az a baj, hogy néha bugos és egy egy képet nem tölt be, viszont nem tudom miért. Lehet a setTimeout túl rövid neki és annyi idő alatt nem tudja betölteni?

Íme:

function oszt()
{

var ajaxRequest; // The variable that makes Ajax possible!

try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){

var vissza=ajaxRequest.responseText;
pakli=vissza.split(",");
szamlalo=0;
elsolap=0;
for (var i in pakli)
{
szamlalo++;
}
document.getElementById("pakli1").innerHTML=szamlalo;
attunes(pakli,elsolap);

}
}
ajaxRequest.open("GET", "leosztas.php" ,true);
ajaxRequest.send(null);
}


function attunes(pakli2,lapszam)
{


szamlalo=document.getElementById("pakli1").innerHTML;
kez[lapszam]=Math.floor(Math.random()*szamlalo);
pakli2.splice(kez[lapszam],1);
szamlalo--;
document.getElementById("pakli1").innerHTML=szamlalo;
ujkep=document.createElement("img");
ujkep.style.width=50+"px";
ujkep.style.height=70+"px";
ujkep.id="k"+pakli2[kez[lapszam]];
ujkep.style.filter='alpha(opacity=' + 0 + ')';
ujkep.style.opacity = 0;
ujkep.src="./cards/"+pakli[kez[lapszam]]+".jpg";
document.getElementById("h"+lapszam).appendChild(ujkep);

attunes2(lapszam,pakli2[kez[lapszam]],0,pakli2);

}

function attunes2(jertek,aktlap,fade,pakli3)
{
j=jertek;
lap=aktlap;
l=fade;
deck=pakli3;
db=0;


if (l==100)
{

clearTimeout(idozito);

if (j!=4)
{
kezdb=j+1;
osztlap=setTimeout("attunes(deck,kezdb)",100);
}
}
else
{
fading=l+5;
fading2=fading/100;
document.getElementById("h"+j).children[0].style.filter='alpha(opacity=' + fading + ')';
document.getElementById("h"+j).children[0].style.opacity=fading2;
idozito=setTimeout("attunes2(j,lap,fading,deck)",10);
}


}
 
1

próbáld ki

ironwill · 2010. Dec. 14. (K), 19.03
Próbáld ki, hogy ha megnöveled a timeout idejét, akkor is jelentkezik-e a hiba.. ezzel hamar választ kaphatsz a kérdésedre..

(használj kódszinenzőt/formázást, a könnyebb értelmezhetőség miatt)
2

Túlbonyolítod

Poetro · 2010. Dec. 14. (K), 19.13

      pakli = vissza.split(",");
      szamlalo = 0;
      elsolap = 0;
      for (var i in pakli) {
        szamlalo++;
      }
Erre miért van szükség? Miért nem egyszerűen:

      pakli = vissza.split(",");
      szamlalo = pakli.length;
      elsolap = 0;
Valamint nem deklarálod rendesen a változóidat var kulcsszóval, és valószínűleg felülírják egymást.

Kezdetnek próbáld meg kidobálni belőle a felesleget, deklarálni a megfelelő változókat, aztán tesztelni, és egyesével add hozzá a szolgáltatásokat.
3

Megvan a hiba

mizantrop · 2010. Dec. 15. (Sze), 15.52
Köszi már megtaláltam a hibát. Nem is ilyen jellegű volt. A random szám generátorral volt a baj, ugyanis azt vettem alapul, hogy hány szám van a tömbben és nem azt, hogy hány képem van... így persze, hogy néha generált olyat is amihez nem volt kép.