Programm Ok aber online spinnt es

Basti_109

Grünschnabel
Hi leute,

ich habe ein Programm geschrieben das Offline super läuft aber Online eine Fehlermeldung bringt. Es geht hierbei um das öffnen einer XML Datei. Im offlinemodus greift das JavaScript auf die XML Datei zu und öffnet sie und zieht sich die Daten raus. Im onlinemodus allerdings bekommen ich die Meldung das mir die Daten noch nicht zu Verfügung stehen. Doch sobald ich einen Alert ausführe und mir irgendeine Meldung anzeigen lasse und diese dann wegclicke werden mir die Daten dann angezeigt. Ich verstehe nicht warum. Kann mir einer erklären wieso das so ist und vorallem was man dagegen tun kann?

Danke schon mal

Basti
 
Möglicherweise besitzt JavaScript online nicht genügend Rechte!

Aber ohne ein bisschen Code, kann dir hier leider keiner helfen...
 
Nur soviel:

JavaScript ist (arbeitet) Clientseitig und nicht Serverseitig!

Offline mögen solche Dinge funktionieren aber online wohl kaum, bis gar nicht und wenn überhaupt vermutlich nur im IE!
 
Der Quelltext sieht folgendermasen aus.
Ich habe die Stelle makiert an der das Problem auftritt.
Code:
<html>
<head>
<title>Monatskalender</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body {
 background-image: url(/back/hintergrund.jpg);
}
.Stil5 {
 font-size: 36px;
 font-weight: bold;
}
.Stil6 {
 color: #2A1FFF;
 font-size: 14px;
}
.Stil8 {font-size: 12px}
-->
</style></head>
<script>
moveTo(0,0);
resizeTo(450,600);
</script>
<body bgcolor="#FFFFFF" text="#000000">
<table width="400" border="0" align="center">
  <tr>
    <th colspan="5" scope="col"><span class="Stil5">Verf&uuml;gbarkeit</span></th>
  </tr>
  <tr>
    <th width="22" height="22" bgcolor="#FF0000" scope="col"><div align="right"></div></th>
    <th width="114" scope="col"><div align="left" class="Stil8">bereits vermietet</div></th>
    <th width="117" height="22" scope="col"hgcolor="FF0000"><div align="center"><span class="Stil6"><a href="" onclick="window.close()">Fenster schlie&szlig;en</a> </span></div></th>
    <th width="114" scope="col"><div align="right" class="Stil8">verf&uuml;gbare Termine</div></th>
    <th width="22" height="22" bgcolor="#2ADFFF" scope="col">&nbsp;</th>
  </tr>
</table>
<XML id="Auto" src="verfuegbar.xml"></XML>
<script type="text/javascript">
<!--
var d = new Date();
var dm = d.getMonth() + 1;
var dj = d.getYear();
if(dj < 999) dj+=1900;
var Zeiten = new Array();
document.write("<table align=center><tr><td>");
document.write("Stand: " + d.getDate() + "." + dm + "." + dj );
document.write("</td></tr></table>");
function Argumente() {
   var arg = new Array();
   var location = window.location.search;
   if (location.length > 0) {
      location = location.substr(1, location.length - 1);
      arg = location.split("&");
   } else {
      arg[0] = false;
   }
   return arg;
}
var arg = Argumente();
var id = arg[0];
//alert(id);

alert("Daten werden geladen");

prob1();
function prob1()
{
//alert("drin");
var VAuto = Auto.getElementsByTagName('Fahrzeugtyp');
 
Hier entsteht das Problem!
 
Sobald das Programm in die For- Schleif reinspringt. Ich denke es liegt einfach an dem Server da er die Daten nicht schnellgenug bereitstellt. Denn so wie ich es oben schon einmal erklärt habe entsteht das Problem nur wenn ich den oben blau makierten alert weg lasse. Dieser gehört eigentlich nicht hier rein muss aber da sonst nichts zu sehen ist. Die frage ist ja nicht ob es überhaupt funktioniert sonder: Warum funktionirt es wenn ich einen alert aufrufe und ohne die Fehlermeldung kommt das "Die Daten noch nicht verfügbar sind".
 
for(i=0; i<VAuto.length; i++)
{
var Vid = VAuto.item(i).getElementsByTagName('id');
 if(id == Vid.item(0).text)
  {
   var VVerfuegbar = VAuto.item(i).getElementsByTagName('Verfuegbar');
   var VDatum = VVerfuegbar.item(0).getElementsByTagName('Date');
   for(j=0; j< VDatum.length;j++)
    {
     Zeiten.push(VDatum.item(j).text);
     //alert(Zeiten.join(" "));
    }
  }
}
/*func ende*/}
for(var zeile = 0; zeile <6 ; zeile++){
   document.write("<table border=0 align=center><tr>");
 for(var spalte = 0; spalte < 2 ; spalte++) {
 if(dm == 13)
 {
 dm = 1;
 dj += 1;
 }
document.write("<td>");
 Kalender(dm,dj);
document.write("</td>");
dm+=1;
 }
document.write("</tr></table>");
}

//Parsen der Datumswerte
function IsVerfuegbar(Jahr, Monat, Tageszahl)
{
var s = Tageszahl + "." + Monat + "." + Jahr;
for(var i=0; i<Zeiten.length;i++)
{
 if(Zeiten[i] == s)
    return true;
}
return false;
}
function Kalender(Monat,Jahr) {
Monatsname = new Array
("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli",
"August","September","Oktober","November","Dezember");
Tag = new Array ("Mo","Di","Mi","Do","Fr","Sa","So");
var KSchrArt = "Verdana,Arial"; /* Schriftart Kalenderkopf */
var KSchrGroesse = 1;           /* Schriftgroesse 1-7 Kalenderkopf */
var KSchrFarbe = "#FFFF00";     /* Schriftfarbe Kalenderkopf */
var Khgrund = "#000066";        /* Hintergrundfarbe Kalenderkopf */
var TSchrArt = "Verdana,Arial"; /* Schriftart Tagesanzeige */
var TSchrGroesse = 1;           /* Schriftgroesse 1-7 Tagesanzeige */
var TSchrFarbe = "#000000";     /* Schriftfarbe Tagesanzeige */
var Thgrund = "#2ADFFF";        /* Hintergrundfarbe Tagesanzeige */
var SoFarbe = "#E00000";        /* Schriftfarbe f. Sonntage */
//var Ahgrund = "#FFFF00";        /* Hintergrundfarbe f. heutigen Tag */
var Vergrund = "#FF0000";       /* Hintergrundfarbe nicht verfügbar */
var jetzt = new Date();
var DieserMonat = jetzt.getMonth() + 1;
var DiesesJahr = jetzt.getYear();
if(DiesesJahr < 999) DiesesJahr+=1900;
var DieserTag = jetzt.getDate();
var Zeit = new Date(Jahr,Monat-1,1);
var Start = Zeit.getDay();
if(Start > 0) Start--;
else Start = 6;
var Stop = 31;
if(Monat==4 ||Monat==6 || Monat==9 || Monat==11 ) --Stop;
if(Monat==2) {
 Stop = Stop - 3;
 if(Jahr%4==0) Stop++;
 if(Jahr%100==0) Stop--;
 if(Jahr%400==0) Stop++;
}
document.write('<table border="3" cellpadding="1" cellspacing="1">');
var Monatskopf = Monatsname[Monat-1] + " " + Jahr;
SchreibeKopf(Monatskopf,Khgrund,KSchrFarbe,KSchrGroesse,KSchrArt);
var Tageszahl = 1;
for(var i=0;i<=5;i++) {
  document.write("<tr>");
  for(var j=0;j<=5;j++) {
    if((i==0)&&(j < Start))
     SchreibeZelle(" ",Thgrund,TSchrFarbe,TSchrGroesse,TSchrArt);
    else {
      if(Tageszahl > Stop)
      {
        SchreibeZelle(" ",Thgrund,TSchrFarbe,TSchrGroesse,TSchrArt);
      }
      else {
      //  if((Jahr==DiesesJahr)&&(Monat==DieserMonat)&&(Tageszahl==DieserTag))
        if (IsVerfuegbar(Jahr,Monat,Tageszahl))
        SchreibeZelle(Tageszahl,Vergrund,TSchrFarbe,TSchrGroesse,TSchrArt);
        else
          SchreibeZelle(Tageszahl,Thgrund,TSchrFarbe,TSchrGroesse,TSchrArt);
          Tageszahl++;
        }
      }
    }
    if(Tageszahl > Stop)
      SchreibeZelle(" ",Thgrund,SoFarbe,TSchrGroesse,TSchrArt);
    else {
      //if((Jahr==DiesesJahr)&&(Monat==DieserMonat)&&(Tageszahl==DieserTag))
      //  SchreibeZelle(Tageszahl,Ahgrund,SoFarbe,TSchrGroesse,TSchrArt);
      if (IsVerfuegbar(Jahr,Monat,Tageszahl))
        SchreibeZelle(Tageszahl,Vergrund,TSchrFarbe,TSchrGroesse,TSchrArt);
      else
        SchreibeZelle(Tageszahl,Thgrund,SoFarbe,TSchrGroesse,TSchrArt);
      Tageszahl++;
    }
    document.write("<\/tr>");
  }
document.write("<\/table>");
}

function SchreibeKopf(Monatstitel,HgFarbe,SchrFarbe,SchrGroesse,SchrArt) {
document.write("<tr>");
document.write('<td align="center" colspan="7" valign="middle" bgcolor="'+HgFarbe+'">');
document.write('<font size="'+SchrGroesse+'" color="'+SchrFarbe+'" face="'+SchrArt+'"><b>');
document.write(Monatstitel);
document.write("<\/b><\/font><\/td><\/tr>");
document.write("<tr>");
for(var i=0;i<=6;i++)
  SchreibeZelle(Tag[i],HgFarbe,SchrFarbe,SchrGroesse,SchrArt);
document.write("<\/tr>");
}
function SchreibeZelle(Inhalt,HgFarbe,SchrFarbe,SchrGroesse,SchrArt) {
document.write('<td align="center" valign="middle" bgcolor="'+HgFarbe+'">');
document.write('<font size="'+SchrGroesse+'" color="'+SchrFarbe+'" face="'+SchrArt+'"><b>');
document.write(Inhalt);
document.write("<\/b><\/font><\/td>");
}
//-->
</script>
<table align="center"><tr><td><a href="" onclick="window.close()">Fenster schliessen</a></td></tr></table>
</body>
</html>
 
Du hast es richtig erfasst... die Daten brauchen logischerweise länger zum Laden, wenn sie nicht auf dem heimischen Rechner liegen... da müssen sie ja erstamal hin.
Dass es funktioniert, wenn du einen alert einbaust, dürfte daran liegen, dass solange, bis der alert weggeklickt wurde, die Skriptausführung stoppt. Das Laden der XML läuft aber weiter... somit ist schlicht mehr Zeit für den Browser, um die Datei zu Laden.

Workaround:
arbeite mit einem try-catch-Statement.
Schlägt "try" fehl, "catch"e, indem du die Funktion etwas zeitverzögert erneut aufrufst.
 
Hi,

das mit den Try Catch ist ein klasse gedanke nur leider functioniert er nicht. es tritt die selbe fehlermeldung auf. Könnte es sein das der alert den ich vor dem Aufruf der Funktion erzeuge ein eigener Prozess ist und die Daten deshalb weitergeladen werden? Denn ich habe die Vermutung das wenn das Programm in auf den Try Catch reagiert der Server die Daten immernoch nicht nachläd.Gibt es noch andere Möglichkeiten so eine Felhermeldung zu umgehen?

Danke

Basti
 
Wenn es mit dem try/catch nicht funktioniert, hast du es möglicherweise falsch eingebaut.... dieses Statement ist ja genau dafür da.....Fehler abfangen-> und eine alternative Aktion durchführen.
 
Ich habe den Try-Chatch um den Funktionsaufruf prob1() gebaut. Also :

Try{
prob1();
}
catch(e)
{
prob1();
}

Da prob1() alles weitere Aufruft müsste das eigentlich ausreichen aber leider es nicht.
Ist ein fehler in der Try-Catch anweisung?
 
#1:
Es heisst try, nicht Try...JS legt auf sowas Wert :-)

#2
Zum Einen machst du das erneute Aufrufen nicht zeitverzögert... zum anderen bringt das "Einbetten" von prob1() in das try/catch nur beim ersten Versuch etwas... bei weiteren Versuchen hat es keine Wirkung mehr.
So sollte es eher gehen:
Code:
<script type="text/javascript">
<!--
function prob1()
{
try {
    //Hier die Anweisungen von prob1()
    }
catch(e)
    {
    setTimeout('prob1()',200);
    return true;
    }
}
//-->
</script>
 

Neue Beiträge

Zurück