Hallo,
Wenn das ganze ohne Firebug laufen lasse oder die Breakepoints nicht an den entscheidenden Stellen setze, passieren Dinge, die mir unerklärlich sind.
ja, du hast ein Problem mit dem Verständnis der zeitlichen Abläufe.
function BildExist(Bild, Projekt)
{
var exist;
var xmlhttp = BrowserCheck();
Du deklarierst eine lokale Variable, die nachher das Funktionsergebnis speichern soll ...
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if(xmlhttp.responseText=='true')
{exist = true;}
else
{exist = false;}
}
}
... gibst dem XHR-Objekt eine Callback-Funktion, die irgendwann später aufgerufen wird, wenn die angeforderte Ressource eintrifft, ...
xmlhttp.open( 'GET', 'http://testseite.de/DatExist.php?dat='+Bild+'.jpg&pro='+Projekt, true );
xmlhttp.send();
return exist;
... und gibst die deklarierte Variable zurück, ohne ihr bisher einen Wert zugewiesen zu haben. Sie ist daher undefined.
function Bildwechsel(Projektname, Bildname)
{
var exist = BildExist(Bildname, Projektname);
if(exist == true)
"Ist es wahr, dass exist wahr ist?"
Diese Abfrage ist Nonsense; ein einfaches
if (exist)
ist leichter zu lesen und bedeutet genau dasselbe. Auch in der anderen Funktion weiter oben machst du es dir unnötig kompliziert:
if(xmlhttp.responseText=='true')
{exist = true;}
else
{exist = false;}
Diesen Block kann man wesentlich einfacher und übersichtlicher schreiben:
exist = (xmlhttp.responseText=='true');
Sogar die Klammern sind hier unnötig und dienen nur der besseren Lesbarkeit.
Apropos übersichtlich: Vielleicht findest du es übersichtlich, in deinem Programmcode immer doppelte Zeilenumbrüche zu machen - für mich bewirkt es das Gegenteil. Einen doppelten Zeilenumbruch (d.h. eine Leerzeile) mache ich nur da, wo auch von der Programmstruktur her ein "Schnitt" sein könnte. Dann erleichtert es tatsächlich das visuelle Erfassen der Struktur.
Wenn ich jetzt bei der Funktion BildExist Breakpoints setze läuft alles normal durch. Wenn die diese Punkte aber nicht setze, bekommt die Variable exist in der Funktion Bildwechsel einen undefinierten Wert. Weiß jemand von euch woran das liegen könnte?
Ja, du versuchst, das Ergebnis eines Vorgangs zu lesen, bevor dieser Vorgang stattgefunden hat.
So long,
Martin
--
Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(