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

anonymous function

adelhorst

Neues Mitglied
Hallo liebes Forum.
Habe hier diese Funktion
Code:
function setImageSrc(imgTarget,strNewSrc){
    //Funktion: Prüft, ob ein SRC valide ist, d.h. das Image überhaupt vorhanden ist
    //          Entweder wird 'strNewSrc' übernommen, oder es wird ein ' Default-SRC' gesetzt.
    var imgTmp=new Image;
        imgTmp.onload =function(){imgTarget.src = strNewSrc}
        imgTmp.onerror=function(){imgTarget.src = "img/diaDflt-s.jpg"}
        imgTmp.src=strNewSrc;
    return (imgTarget.src==strNewSrc);
}
Sinn und Zweck der Funktion ist wohl aus der Beschreibung ersichtlich.
Die Funktion macht soweit was sie soll, aber die 'return'-Zeile macht mir Schwierigkeiten. Mit dieser Zeile wollte ich die Funktion in soweit erweitern, als dass ich eine Rückmeldung haben wollte, ob 'strNewSrc' übernommen werden konnte oder nicht.
Ich bekomme aber IMMER 'false' zurück, da im 'imgTarget.src' immer nur das ursprüngliche SRC ausgegeben wird, obwohl dem 'imgTarget' ein neues SRC (entweder 'strNewSrc' oder 'Default-Src') zugewiesen wurde.
Wenn ich das 'imgTarget.src' gleich nach dem Rücksprung aus 'setImageSrc'-Funktion mir ausgeben lasse, dann hat es nämlich einen anderen Wert erhalten. Auch die Image-Anzeige spiegelt dies wieder.
Ich hatte auch mal sowas getestet, bekomme aber immer 'false' zurück!?
Code:
function setImageSrc(imgTarget,strNewSrc){
    //Funktion: Prüft, ob ein SRC valide ist, d.h. das Image überhaupt vorhanden ist
    var imgTmp=new Image;
    var blnRtrn = false;
        imgTmp.onload =function(){blnRtrn = true}
        imgTmp.onerror=function(){blnRtrn = true}
    return blnRtrn;
}
Gruß Adelhorst
 
Hallo nochmal.
Habe folgenden Test gemacht und ein paar 'alerts' zur Überwachung eingebaut:
Code:
    function setImageSrc(imgTarget,strNewSrc){
        var imgTmp=new Image;
        alert("alert1: "+imgTarget.src);
            imgTmp.onload =function(){imgTarget.src = strNewSrc;         alert("alert2: "+imgTarget.src)}
            imgTmp.onerror=function(){imgTarget.src = "img/diaDflt-s.jpg";alert("alert3: "+imgTarget.src)}
            imgTmp.src=strNewSrc;
        alert("alert4: "+imgTarget.src);
        return (imgTarget.src==strNewSrc);
    }
Zusätzlich habe ich nach dem Rücksprung aus dieser Funktion noch einen 'alert5' eingebaut.
Nun hätte ich erwartet, dass 'alert2/3' und 'alert4' und 'alert5' den gleichen Inhalt aufzeigen. Dem ist aber nicht so.
'alert4' zeigt IMMER den Inhalt von 'alert1' auf!? Daher funktioniert auch die 'return'-Zeile nicht.
Das verstehe ich nicht. Auf der einen Seite kann die anonymous function auf 'imgTarget' zugreifen und das Bild ändern, aber auf der anderen Seite bekommt den Wechsel die Funktion 'setImageSrc' nicht mit und zeigt mir immer den alten Inhalt auf!? Als ob es dann doch zwei unterschiedliche 'imgTarget'-Objekte gäbe!?
 
Warum überprüfst du das nicht mit einem Server-Request?

jQuery:
Code:
var checkImgSrc = function(img) {
    $.ajax({
      url: 'img/' + img,
      type: "GET",
      success: function() {
        console.log('Bild kann geladen werden');
      },
      error: function(){
        console.log('Bild kann nicht geladen werden');
      }
    });
};

checkImgSrc('foo.jpg');
 
Hallo Tronjer.
Danke für deinen Hinweis und deine Lösung.

Bin noch am Anfang mit dem Erstellen von HTML. Mit Javascript mache ich gerade meine ersten Schritte. Obwohl ich Java kenne, sind das doch zwei unterschiedliche Dinge. :-)

Zum Einen wollte ich mit 'ajax' erst etwas später befassen, aber ich bin doch sehr interessiert an deiner Lösung. Vielleicht verwende ich doch gleich 'ajax'. Mal sehen. :-)
( Hast du auch noch eine Lösung um alle Unterverzeichnisse eines Verzeichnisses zu erhalten, und alle Dateien eines Verzeichnisses!? Ziel meiner Seite soll es sein, verschiedene Alben-Inhalte aufzuzeigen, daher benötige ich halt den Inhalt von meinem 'Alben'-Ordner. Hatte aber gegoogelt und erfahren, dass das nicht so ganz reibungslos sein soll, wenn man den Inhalt auf dem Server auslesen will!? Daher mein derzeitiges Ablauf-Vorhaben: "Auslesen bis nix mehr da, bzw. Fehler auftritt". )

Zum Anderen interessiert mich halt das 'komische' Verhalten in der genannten Funktion und ich würde es gerne verstehen oder besser noch eine Lösung dafür finden wolllen. Allein des Verständnisses wegen.
 
danke schön.
Sehe ich das richtig, dass ich mir hierzu php und xampp installieren muss? Bisher arbeite ich nur mit scriptly.
Viell hast du ja einen Vorschlag für mich, wie ich da am besten durchstarten kann.
Gruß Adelhorst
 
Hängt davon ab, wo du hin willst. Für den Anfang reicht ein Windows-PC, und da bietet sich XAMPP als lokale Entwicklungsumgebung an. Aber das Web basiert auf UNIX, und wenn du irgendwann tiefer einsteigen solltest, wirst du merken, dass sich viele Dinge auf der Kommandozeile abspielen. Die Mehrzahl der Webentwickler arbeitet mit Linux-Rechnern oder Macs.
 
Hallo nochmal.
Habe mir soweit xampp installiert und auch das Auslesen der Verzeichnisse über php erfolgreich eingebaut.
Ich hätte aber dazu noch eine kleine Frage bevor ich den Thread als erledigt abhake.
Bevor ich auf php umgestiegen bin, hatte ich folgende JS-Funktion verwendet, die mir zurückgibt, ob ein SRC überhaupt auf dem Server vorhanden ist:
Code:
    function blnImageSrcExist(strImgSrc) {
        var blnRtrn = true;
        $.ajax({
            async: false,
            url: strImgSrc,
            type: "GET",
            success: function() {blnRtrn = true;},
            error: function() {blnRtrn = false;}
        });
        return blnRtrn;
    }
Nachdem isch nun auf php umgestiegen bin funktioniert diese Funktion nicht mehr, das Programm bleibt im ajax-teil hängen, denn wenn ich den teil auskommentiere läuft das Programm zumindest durch.

Ist es standardmäßig so, dass ajax in diese php-Umgebung nicht funktioniert?
 
ja die Dateien sind in einem Unterordner von htdocs .. das war kein problem, das hatte ich alles gut verstanden und funktionierend umgesetzt.

Also mein Projekt hat als 'normale' html funktioniert, mit besagter ajax-Funktion, die in eine scriptdatei ausgelagert ist.
Dann habe ich das Projekt funktionierend unter xampp gebracht und es funktioniert dort auch noch alles.
Wenn ich aber die html-extension auf php umstelle, funktioniert auch noch alles, nur bis auf diesen kurzen ajax-part!? In dem Projekt gibt es zur Zeit nur diesen einzigen ajax-part.

(Wenn ich den ajax-part auskommentiere bekomme ich zwar immer true zurück, aber der code läuft zumindest durch.
MIT ajax-part hängt es sich auf. php-teile sind da auch noch nicht vorhanden.)
 
Das kenne ich leider noch nicht :-(
habs mal installiert, aber ich hab auch die web-entwickler-tools von firefox hier.

hab vor dem ajax-part einen haltepunkt eingebaut, bis dahin war alles ok.
Dann einen schritt ausführen lassen, dabei ist er über den ganzen ajax-part gegangen und hat nur exception angezeigt, die ich nicht weiter ausloten konnte. Waren keine weiteren details dazu da.
 
Also PHP funktioniert, jQuery funktioniert, und dein AJAX-Call geht an eine Datei, die sich innerhalb localhost befindet (kein cross-domain-request)?

Klingt merkwürdig, aber schau dir mal die Response vom Server im Netwerk-Tab an.
 
Moin moin ..
Erstmal vielen Dank für die Hilfe bei meinem Problem.

Habe mal eine Seite gemacht, die soweit nur aus dieser ajax-Funktion besteht und mir über zwei 'alert'-Ausgaben die Existenz von zwei Bilddateien richtig wiedergibt.
Test: Eine Bilddatei existiert und eine andere Bilddatei nicht.
Ergebnis: die 'alert'-Ausgaben spiegeln genau dies wie erwartet wieder.

Wenn ich diese Seite kopieren und als php abspeichere, funktioniert dies aber dort nicht. => Scriptfehler!!
Den Webtools zufolge wird das '$' - Zeichen in '$.ajax' moniert, da angeblich unbekannt.
(Bei der HTML-Version wird dies NICHT moniert und läuft fehlerfrei durch.)
FF und IE geben identische Resultate wieder und beide Dateien befinden sich in der XAMPP-Umgebung im gleich Pfad und wurden über 'localhost/...' in den Browsern aufgerufen.

Das ist derzeit der Stand, mal sehen was ich noch so rausfinde oder machen kann.
Gruß Adelhorst
 
Zuletzt bearbeitet:
Habe nun dies noch im Head-Bereich eingefügt und damit lief es:
Code:
<scriptsrc="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"type="text/javascript"></script>
Den Tipp hatte ich aus dem Internet gegoogelt.

Damit ich auch offline meine Website testen kann, habe ich mir die aktuelle 'jquery-1.10.2.js' heruntergeladen und in das Projektverzeichnis hineinkopiert. Mit der folgenden Zeile funktioniert es dann.
Code:
<script type="text/javascript" src="js/jquery-1.10.2.js"></script>

Meine Frage wäre nun, warum dies in der HTML ohne dem Verweis klappt und in der PHP-Version notwendig ist.

Ich bedanke mich erstmal für die Hilfe, hab wieder was dazu gelernt.
Gruß Adelhorst :)
 
Entweder hattest du jQuery nicht eingebunden, falsch referenziert oder die Ajax-Funktion vor Einbindung von jQuery aufgerufen.
 
Zurück
Oben