• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Ajax Preloader

Status
Für weitere Antworten geschlossen.

Frank

Neues Mitglied
Hi Community,

Ich habe nun für eine Seite ein relativ großes Design geschrieben.
Groß in dem Sinne, dass viel geladen werden muss (ca. 57 Bilder).

Also habe ich mich daran gemacht einen JavaScript Preloader gebastelt, der über Ajax funktioniert.

Der preloader sieht gut aus (www.ts-onlyfree.de), doch wenn ich meinen Cache leere, der Preloader durch ist, und dann die Seite geladen wird, muss trotzdem noch 'lange' auf das laden der Bilder gewartet werden.

Ich gehe also davon aus, dass der Preloader nicht die bilder in den Cache 'schreibt'. Anscheinend habe ich bei dem Konzept einen grundlegenden Fehler.

Ich würde mich daher über alle Ansätze für das Problem (oder noch besser die Lösung;)) freuen.

Der Preloader:
Der Preloader besteht aus 2 Dateien

Der Preloader an sich:
PHP:
<?php
error_reporting(E_ALL);
session_start();
include("include/mysql.php");
include("include/mailer.php");
include("include/timediff.php");
include("include/serverinfo.php");
include("include/bbcode.php");
include("include/generator.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Teamspeak 2 Free Hoster || lizensiert</title>
<meta name="author" content="Frank Zechert">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="language" content="de">
<meta name="copyright" content="Inhaber">
<meta name="revisit" content="2 weeks">
<meta name="revisit-after" content="10 days">
<meta name="robots" content="all">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta http-equiv="content-language" content="de">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="pragma" content="no-cache">
<link rel="stylesheet" href="styles/design.css">
<link rel="stylesheet" href="styles/elements.css">
<link rel="stylesheet" href="styles/text.css">
<script type="text/javascript">
//globale Instanz von XMLHttpRequest
var xmlHttp = false;
var bilder = new Array();
//XMLHttpRequest-Instanz erstellen
//... für Internet Explorer
try {
    xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
    try {
        xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
        xmlHttp  = false;
    }
}
//... für Mozilla, Opera, Safari usw.
if (!xmlHttp  && typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
}
<?php
$fh = opendir("./images");
$verzeichnisinhalt = array();
$i = 0;
while (true == ($file = readdir($fh)))
{
  if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif") or (substr(strtolower($file), -3)=="png"))
  {
    ?>
    bilder[<?php echo $i; ?>] = '.images/<?php echo $file; ?>'
    <?php
    $i++;
  }
}
closedir($fh);
?>
var anzahl = bilder.length;
function loadData(url,c)
{
  if (xmlHttp)
  {
    xmlHttp.open('GET', 'loadimage.php?id=' + c + '&url=' + url, true);
    xmlHttp.onreadystatechange = answere;
    xmlHttp.send(null);
 }
}
function startload(c)
{
  loadData(bilder[c],(c+1))
}
function answere()
{
  if (xmlHttp.readyState == 4)
  {
    var idpart = xmlHttp.responseText.split("|");
    var id = parseFloat(idpart[0])
    anzahl = parseFloat(anzahl)
    var status = id*100/anzahl
    status = status.toFixed(2)
    document.getElementById("fortschritt").innerHTML = status + "%";
    if(id < anzahl)
      startload(id)
    else
      document.location.href="index.php?pageid=news"
  }
}
</script>
</head>
<body onLoad="startload(0)">
<table cellpadding="0" cellspacing="0" id="aussen">
<tr>
<td id="oben_links">&nbsp;</td>
<td id="oben">&nbsp;</td>
<td id="oben_rechts">&nbsp;</td>
</tr>
<tr>
<td id="links">&nbsp;</td>
<td id="mitte">
<div align="center">Seite wird vorgeladen...</div>
<div>&nbsp;</div>
<div align="center"><img src="http://www.html.de/images/5219progress_orange_load.gif" width="133" height="16" border="0" alt=""></div>
<div>&nbsp;</div>
<div align="center">Fortschritt: <span id="fortschritt">0%</span></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div align="center" class="small">Sollte die automatisch Weiterleitung nicht funktionieren, klicken Sie bitte
<a href="index.php?pageid=news">hier</a></div>
</td>
<td id="rechts">&nbsp;</td>
</tr>
<tr>
<td id="unten_links">&nbsp;</td>
<td id="unten">&nbsp;</td>
<td id="unten_rechts">&nbsp;</td>
</tr>
</table>
</body>
</html>

Und die PHP Datei im Hintergrund
PHP:
<?php
$url = $_GET["url"];
$id = $_GET["id"];
echo $id;
?>
|
<img src="<?php echo $url; ?>" border="0" alt="">
 
In deinem Preloader steht folgende Zeile, die genau das Gegenteil von dem macht, was du möchtest :D

Code:
<meta http-equiv="pragma" content="no-cache">

Du willst, dass der Browser cached...und verbietest es ihm...

Code:
<meta http-equiv="cache-control" content="cache">
<meta http-equiv="pragma" content="cache">
 
mist^^

Danke für den Hinweis, ist mir selber klar.

Hatte den Ajax Teil von ner Shoutbox lopiert und da war der NoCache Code mit drin, damit das aktualisieren funktioniert.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben