Die Frage ist mir etwas peinlich, aber ich bin mit meinem - zugegebenermaßen sehr kleinen - Latein am Ende.
Problemstellung: Ich möchte eine Verlinkung nur einblenden, wenn eine Datei auf dem Server vorhanden ist. Da diese Sache auf einem Authoring-Tool für Lernanwendungen aufsitzt, kann ich nur Javascript verwenden und (zumindest vermute ich das sehr stark) nicht ohne weiteres weitere Bibliotheken aufsetzen. Um die Dinge beim Namen zu nennen: Es geht um Captivate und die Frage, ob die Datei "a10.pdf" vorhanden ist.
Hier mein letzter Versuch:
var request = new XMLHttpRequest();
request.open('POST','a10.pdf', true);
if (request.status >= 200 && request.status < 300) {
cp.show("a10_but");
alert('a10.pdf vorhanden');
} else {
cp.hide("a10_but");
alert('a10.pdf NICHTvorhanden');
};
Die Zeilen
cp.show("a10_but");
alert('a10.pdf vorhanden');
und
cp.hide("a10_but");
alert('a10.pdf NICHTvorhanden');
funktionieren. Es wird ein in Captivate angelegtes Element - "a10but" - angezeigt oder eben nicht. Das Element enthält die komplette Verlinkung. Ich habe das durch eine andere Abfrage, als meinem Versuch das Vorhandensein einer Datei abzufragen, ausprobiert. Der alert kommt später wieder raus.
Der Wurm ist also im Teil:
var request = new XMLHttpRequest();
request.open('POST','a10.pdf', true);
if (request.status >= 200 && request.status < 300)
denn die Meldung ist jedes mal, egal ob die Datei vorhanden ist oder nicht, "a10.pdf NICHTvorhanden".
Folgende Varianten habe ich u.a. bereits ebenfalls ohne Erfolg probiert:
- kompletter absoluter URL statt "a10.pdf"
- "HEAD" statt "POST"
- Einbettung in einen Eventhandler (den ich aber eigentlich sowieso unbedingt vermeiden möchte, weil es im Gesamtprojekt nicht um eine, sondern mehrere Dutzend Dateien geht)
- Die Variante mit der Abfrage, ob ein "Bild" vorhanden ist:
var tmp=new Image;
tmp.src='http://xyz.de/test/a10.pdf';
if(tmp.complete)
alert("Datei vorhanden");
else
alert("Datei nicht vorhanden");
Ich habe bisher immer nur soweit gescripted (meistens eben etwas angepasst), wie ich es gebraucht habe und es ist mir bewusst, dass mir im Grunde auch die Basics fehlen, was ich sukzessive nachholen möchte. Entsprechende Hinweise helfen mir aber alleine nicht weiter. ;) Wohl aber Aussagen, wo ich hier den offensichtlich ja vorhandenen Bock geschossen habe - oder eben auch, dass sowas allein mit Javascript ohne den Umweg über eine PHP-Datei (den ich ja nicht gehen kann) einfach nicht machbar ist.