Hallo,
du hast anscheinend missverstanden, wie Ajax funktioniert: nämlich asynchron. Du gehst hingegen von einer synchronen Abarbeitung deiner Funktionen aus. Du gehst davon aus, dass BildExist anhand der Serverantwort einen Wert zurückgeben kann. Das funktioniert nicht, da die Funktion sofort nach dem .send() beendet wird und die HTTP-Anfrage im Hintergrund gestartet wird. Das bedeutet, deine BildExist-Funktion wird immer undefined zurückgeben (das ist der Standardwert der Variablen exist, da ihr zu dem Zeitpunkt noch kein Wert zugewiesen wurde).
Wenn die Serverantwort eingetrudelt ist, so wird die onreadystatechange-Callback-Funktion ausgeführt. Erst daran kannst du mit dem Wert weiterarbeiten. Einfach exist auf true oder false zu setzen, bringt darin nichts, da die äußere Funktion BildExist schon längst durchgelaufen ist. Denn der Browser »wartet« an dieser Stelle nicht auf die Serverantwort, bevor er mit dem Ausführen des JavaScripts fortführt. Klar, wenn du Breakpoints setzt, so sorgst du künstlich dafür, dass der Browser wartet.
Du müsstest das Program also anders strukturieren. Du kannst z.B. eine anonyme Callback-Funktion an BildExist übergeben, welche den exist-Wert übergeben bekommt und die gewünschten Änderungen vornimmt:
BildExist(Bildname, Projektname, function (exist) {
var bild = document.getElementsByName(Bildname)[0];
if (exist) { ... } else { ... }
});
BildExist nimmt diese Funktion z.B. als Parameter »callback« entgegen und führt sie aus, sobald die Serverantwort eingetroffen ist:
function BildExist(Bild, Projekt, callback) {
...
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200 && xmlhttp.responseText == 'true') {
callback(true);
} else {
callback(false);
}
}
};
...
}
Grüße,
Mathias