susanne: On error bei generischen Links zu Bildern

Hallo ihr Lieben,
ich habe ein Problem
Ich lese aus einem SPAN-Tag in meiner HTML-Seite eine Kundennummer aus und verwende die Kundennummer dafür Bilder zu diesem Kunden anzuzeigen. Diese Bilder liegen auf einem externen Server. Das Aufrufen der Bilder fuktioniert Einwandfrei. Ich habe nur ein Problem. Nicht zu allen Kunden habe ich Bilder und in diesem Fall erscheint im Brwoser ein unschönes Bild mit einem roten X. Statt dessen möchte ich aber ein generelles Fehlerbildchen anzeigen. Nun wollte ich in das Script ein onerror einbauen was dann ein Fehlerbild zeigen soll. Dieses Bild liegt hier:

src="file://server001/All/bilder/error.jpg

Wie bekomme ich diesen onerror Befehl in das untere Coding. Ich habe alles probiert aber nichts funktioniert. Leider bin ich kein JavaScript-Profi und das untere Script habe ich mir mit sehr grosser Mühe zusammengebaut.

<script type="text/javascript">
var kunde = document.getElementById("ZMB00CS1").innerHTML;
alert(kunde);
document.write('<img border="0" src="file://server001/All/bilder/'+ kunde +'_in_1.jpg"><BR>');
document.write('<img border="0" src="file://server001/All/bilder/'+ kunde +'_in_2.jpg"><BR>');
document.write('<img border="0" src="file://server001/All/bilder/'+ kunde +'_in_3.jpg"><BR>');
document.write('<img border="0" src="file://server001/All/bilder/'+ kunde +'_in_4.jpg">');
</script>

Über jede Hilfe wäre ich sehr sehr Dankbar.
Grüße,
Sussane

  1. hi,

    Ich lese aus einem SPAN-Tag in meiner HTML-Seite eine Kundennummer aus und verwende die Kundennummer dafür Bilder zu diesem Kunden anzuzeigen. Diese Bilder liegen auf einem externen Server. Das Aufrufen der Bilder fuktioniert Einwandfrei. Ich habe nur ein Problem. Nicht zu allen Kunden habe ich Bilder und in diesem Fall erscheint im Brwoser ein unschönes Bild mit einem roten X.

    Dann liefert der fremde Server also nichts zurück, was sich vernünftig als Bild interpretieren lässt.

    Statt dessen möchte ich aber ein generelles Fehlerbildchen anzeigen.

    Dann wäre es, so lange du den anderen Server konfigurieren (lassen) kannst, das einfachste, diesem beizubringen, bei nicht existenten Bildern zusammen mit dem 404-Fehlercode auch noch Bilddaten auszuliefern - die deines Ersatzbildchens.

    Wie bekomme ich diesen onerror Befehl in das untere Coding. Ich habe alles probiert aber nichts funktioniert.

    Und ich habe "alle" deine vorgezeigten Versuche analysiert, und keinen Fehler erkennen können. (<- Zaunpfahl)

    Leider bin ich kein JavaScript-Profi und das untere Script habe ich mir mit sehr grosser Mühe zusammengebaut.

    <script type="text/javascript">
    var kunde = document.getElementById("ZMB00CS1").innerHTML;
    alert(kunde);
    document.write('<img border="0" src="file://server001/All/bilder/'+ kunde +'_in_1.jpg"><BR>');

    Ich bin mir nicht sicher, ob die Browser reagieren, wenn man onerror als Attribut direkt im HTML unterbringt - oder ob es nur bei Generierung von Img-Objekten in Javascript ausgewertet wird. Falls letzteres, wirst du dich ein wenig intensiver damit auseinandersetzen müssen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo Wahsaga,

      ich habe leider keinen Zugriff auf den Server.
      Wir ich schon an Rob geschrieben hatte reicht es schon aus wenn ich einfach nur einen Text erhalte wo dann drin steht "Sorry kein Bild vorhanden!". Es muss kein Bild sein. Das wird alles leider viel zu kompliziert. Mit versuchen meinte ich das ich versucht habe irgendwie noch ein zweites document.write in die url für das Bild zu bekommen. Das scheint aber nicht zu gehen. Ich gebe zu das ich JavaScript nicht gut kann aber ich versuche ja schon alles auszuprobieren ohne euch zu nerven.

      Viele Grüße,
      Susanne

      1. Ich gebe zu das ich JavaScript nicht gut kann aber ich versuche ja schon alles auszuprobieren ohne euch zu nerven.

        auch den Tipp den wahsaga dir gegeben hat?

        Struppi.

        --
        Javascript ist toll (Perl auch!)
  2. Hi!

    Das hier ist schon mal falsch:
    document.write('<img border="0" src="file://server001/All/bilder/'+ kunde +'_in_1.jpg"><BR>');

    Das Pseudoprotokoll heißt file:/// und nicht file://.
    Und davon abgesehen solltest du es eh nicht benutzen.

    Und dann fehlt mal wieder das alt-Attribut im Imagetag. Dieses ist zwingend vorgeschrieben, wenn du gültigen Code fabrizieren willst.

    Und dann gehst du die Sache irgendwie falsch an.
    Warum baust du nicht einfach eine Abfrage ein, ob ein Bild vorhanden ist oder nicht und lieferst dann ein entsprechendes Standardbild aus, wenn das nicht der Fall ist?

    Kannst du die Sache eigentlich nicht serverseitig lösen?
    Dein Script versagt ja völlig, wenn ein User nicht die Möglichkeit hat, JavaScript zu nutzen.

    Schöner Gruß,
    rob

    1. Hi Rob,

      Sorry aber ich hatte geschrieben das ich kein Profi bin :-)
      Du schreibst:

      "Das Pseudoprotokoll heißt file:/// und nicht file://.
      Und davon abgesehen solltest du es eh nicht benutzen"

      Wenn ich file:/// benutze bekomme ich keine Bilder mehr.
      Severseitig haben wir keine Möglichkeiten etwas zu unternehmen.
      Wir bekommen nur die Bilder aber wir haben keinen Einfluß auf alles anderen. Leider.

      Es würde mir ja schon reichen wenn kein Bild kommt sondern einfach nur der Text "Sorry kein Bild vorhanden!". Muss man dafür auch document.write benutzen?
      Grüsse,
      Susanne

      1. hi,

        "Das Pseudoprotokoll heißt file:/// und nicht file://.
        Und davon abgesehen solltest du es eh nicht benutzen"

        Wenn ich file:/// benutze bekomme ich keine Bilder mehr.

        Wenn du file benutzt, wo ist dann überhaupt ein fremder _Server_ im Spiel?
        Mittels dieses Pseudoprotokolls wird auf das Dateisystem zugegriffen - es kann sich also höchstens um einen als Laufwerk eingebundenen/gemounteten externen Datenspeicher handeln.

        Severseitig haben wir keine Möglichkeiten etwas zu unternehmen.
        Wir bekommen nur die Bilder aber wir haben keinen Einfluß auf alles anderen. Leider.

        Man muss nicht immer alles als gottgegeben akzeptieren, insb. wenn es sich derart negativ auf das Gesamtprodukt auswirkt.
        Nach sinnvollen Alternativen zu suchen, erscheint mir der bessere Weg.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo wahsaga, Rob, Struppi und alle anderen die den Thread lesen,
          ich habe nun folgendes Coding erstellt was auch tut was ich vorhabe. Nun habe ich jedem Bild einen Namen gegeben und bei Fehlern wird eine eigene Routine aufgerufen die nur die Src austauscht. Es klappt alles zwar Prima aber es kommt mir nicht ganz so Sauber vor. Nun bin ich wirklich mit meinem Latein am Ende und weiss nicht was ich da noch verbessern kann :-( Vielleicht könnt ihr mir bitte hier ein wenig helfen.
          Grüsse,
          Susanne

          <HTML>
          <HEAD>
          <META NAME="GENERATOR" Content="Microsoft DHTML Editing Control">
          <TITLE>Kunden Details</TITLE>

          <script language="javascript">
          window.onerror=null;
          function imgErrorFunc() {
          bild1.src="file://server001/All/bilder/error.jpg";
          }
          </script>
          <script language="javascript">
          window.onerror=null;
          function imgErrorFunc2() {
          bild2.src="file://server001/All/bilder/error.jpg";
          }
          </script>
          <script language="javascript">
          window.onerror=null;
          function imgErrorFunc3() {
          bild3.src="file://server001/All/bilder/error.jpg";
          }
          </script>
          <script language="javascript">
          window.onerror=null;
          function imgErrorFunc4() {
          bild4.src="file://server001/All/bilder/error.jpg";
          }
          </script>
          </HEAD>
          <BODY>
          <SPAN id=ZMB00CS1 style="DISPLAY: none"><object>
                   <param name="OWNER" value="SAP_BW"/>
                   <param name="CMD" value="GET_ITEM"/>
                   <param name="NAME" value="TEXTELEMENTS_2"/>
                   <param name="ITEM_CLASS" value="CL_RSR_WWW_ITEM_TEXT_ELEMENTS"/>
                   <param name="DATA_PROVIDER" value="DATAPROVIDER_1"/>
                   <param name="GENERATE_CAPTION" value=""/>
                   <param name="SHOW_COMMON_ELEMENTS" value=""/>
                   <param name="SHOW_FILTERS" value=""/>
                   <param name="SHOW_VARIABLES" value=""/>
                   <param name="ELEMENT_TYPE_1" value="VARIABLE_K"/>
                   <param name="ELEMENT_NAME_1" value="ZMB00CS1"/>
                   <param name="ONLY_VALUES" value="X"/>
                   ITEM:            TEXTELEMENTS_2
          </object></SPAN>
          <script type="text/javascript">
          var year = document.getElementById("ZMB00CS1").innerHTML;
          alert(year);
          document.write('<img name="bild1" border="0" src="file://server001/All/bilder/'+ year +'_in_1.jpg" onError="imgErrorFunc();"><BR>');
          document.write('<img name="bild2" border="0" src="file://server001/All/bilder/'+ year +'_in_2.jpg" onError="imgErrorFunc2();"><BR>');
          document.write('<img name="bild3" border="0" src="file://server001/All/bilder/'+ year +'_in_3.jpg" onError="imgErrorFunc3();"><BR>');
          document.write('<img name="bild4" border="0" src="file://server001/All/bilder/'+ year +'_in_4.jpg" onError="imgErrorFunc4();"><BR>');
          </script>
          </BODY>
          </HTML>

          1. hi,

            Nun bin ich wirklich mit meinem Latein am Ende und weiss nicht was ich da noch verbessern kann

            Na zunächst mal entwickelt man nicht mehrere Funktionen, die eigentlich genau das gleiche machen, nur mit einem unterschiedlichen Objekt oder Wert.

            Da kann man genauso gut eine Funktion nutzen, der man die entsprechenden Variablen als Parameter übergibt.

            function imgErrorFunc(bildObjekt) {
              bildObjekt.src="file://server001/All/bilder/error.jpg";
            }

            Aufruf aus dem HTML-Eventhandler heraus dann mit onError="imgErrorFunc(this)", um die Referenz auf das jeweilige Bild an die Funktion zu übergeben.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hi!

              Na zunächst mal entwickelt man nicht mehrere Funktionen, die eigentlich genau das gleiche machen

              Und vor allem braucht man auch nicht jedesmal wieder einen Scriptbereich zu öffnen...
              Man darf auch mehrere Funktionen innerhalb eines Script-Tags schreiben... ;)

              Und dann wäre noch zu erwähnen, daß der HTML-Code niemals durch einen Validator kommt...

              Schöner Gruß,
              rob

              1. Hi!

                Hi Rob,
                kennst Du einen guten Validator den ich nehmen kann um das zu überprüfen? Vielen Dank im voraus,
                Susanne

                1. Hi!

                  kennst Du einen guten Validator den ich nehmen kann um das zu überprüfen? http://validator.w3.org/

                  Schöner Gruß,
                  rob

            2. Hallo Wahsaga,
              vielen Lieben Dank.
              Jetzt ist es genau so wie es aussehen sollte.
              Nun werde ich Robs Vorschlag ausprobieren und schauen ob ich durch den Validator komme.
              Viele Grüße,
              Susanne

  3. Wie bekomme ich diesen onerror Befehl in das untere Coding.

    Ich fürchte, dass das nicht so einfach geht, du solltest dich mit dem Image-Objekt näher beschäftigen, einen Anwendungsfall mit onerror findest du hier: http://javascript.jstruebig.de/javascript/42/.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.