Wenn eine Funktion keinen Wert erhält trotzdem eine ausgabe

zoschel

Grünschnabel
Hallo zusammen,

Wie hier schon gelöst https://www.tutorials.de/threads/funktion-oder-class-oder-div-refresh.403111/
Habe ich eine Frage,

wenn diese Funktion keinen Wert erhält, ich meine gar nichts, sie greift praktisch total ins leere, möchte ich in die Class p.intro ein festes Bild ausgeben, und sobald die Funktion wieder einen Wert erhält soll sie normal weiter arbeiten. muss man für diese Funktion noch einen Funktion machen?

Javascript:
<script type="text/javascript">
    $(function () {
        function aktualisieren() {
            var res = $('#genre').text();
            if (res != '') {
                $('p.intro').html('<img src="Bilder/' + res + '.jpg"  width="10%">');
            }
        }
        aktualisieren();
        var auto_refresh = setInterval(function () {
            aktualisieren();
        }, 5000);
    });
</script>
<div id="bild">
    <p class="intro"></p>
</div>
<p>
<span id="genre"></span>

Danke euch schon mal für Eure Zeit.

MfG
 
Ich habe jetzt noch mal geschaut, die Bedingung kommt ein Script vorher, und zwar von hier, http://webjab.de:9500/info_jsonp.js
und wird dann in folgende Seite als js eingefügt view-source:http://webjab.de:9500/stream.html .

Wenn info_jsonp.js keinen Wert erhält sieht die Ausgabe in der console von view-source:http://webjab.de:9500/stream.html foldend aus
Javascript:
<span id="getscript">
    <script type="text/javascript chartset=UTF-8" src="http://webjab.de:9500/json.xsl?mount=/live&callback=0"></script>
</span>

Für mich würde das bedeuten, wenn id getscript 0 oder nichts ausgibt soll in id p.intro ein bestimmtes Bild angezeigt werden, ansonsten soll die Funktion

Javascript:
<script type="text/javascript">
    $(function () {
        function aktualisieren() {
            var res = $('#genre').text();
            if (res != '') {
                $('p.intro').html('<img src="Bilder/' + res + '.jpg"  width="10%">');
            }
        }
        aktualisieren();
        var auto_refresh = setInterval(function () {
            aktualisieren();
        }, 5000);
    });
</script>
<div id="bild">
    <p class="intro"></p>
</div>
<p>

normal weiter laufen.
 
Hallo zoschel,

ich gehe davon aus, dass der Rückgabewert 0 bzw. empty auch im DIV "#genre" gespeichert wird?

Dann kannst Du die Bedinung einfach um die Prüfung auf 0 erweitern.

Beispiel:
Wenn "res" nicht leer und nicht 0 => zeige Bild aus res
Else
Zeige FALLBACKBILD

Javascript:
<script type="text/javascript">
    $(function () {
        function aktualisieren() {
            var res = $('#genre').text();
            if (res != '' && res != 0) {
                $('p.intro').html('<img src="Bilder/' + res + '.jpg"  width="10%">');
            } else {
                $('p.intro').html('<img src="Bilder/MEINFALLBACKBILD.jpg"  width="10%">');
            }
        }
        aktualisieren();
        var auto_refresh = setInterval(function () {
            aktualisieren();
        }, 5000);
    });
</script>
<div id="bild">
    <p class="intro"></p>
</div>
<p>

LG
 
Danke Splater für Deine Antwort,

so ähnlich hatte ich das schon getestet, dann habe ich festgestellt, dass die Funktion generell nur funktioniert wenn wenn die Vorbedingung erfüllt ist, das wäre in meinem fall <span id="getscript">.
Diese wird hier generiert http://webjab.de:9500/info_jsonp.js und dann in meiner stream.html per Script eingefügt siehe hier http://webjab.de:9500/stream.html (Quelltext anzeigen lassen).

Das bedeutet für mich, wird <span id="getscript"> durch das http://webjab.de:9500/info_jsonp.js nicht generiert, also erhält keinen Wert, bleibt die Seite weis und die Funktion wird nicht ausgeführt.
ID "#genre" hat dann weder 0 noch empty. Und genau das ist der Punkt, kommt von daher rein gar nichts soll ein Bild in p.intro geschrieben werden, sind die Vorbedingen wieder erfüllt so übernimmt dann die Funktion wieder seine Arbeit.

Ist Kompliziert, ich weiß, das alles würde mit der Funktion von oben normal und super laufen, wenn liquidsoap in der Lage wäre den Tag "Genre" von den Sourcen zu Mapen. so muss ich halt versuchen einen Umweg zu konstruieren.

Kommt gar keine der Vorbedingungen an(Keine Werte) dann soll in p.intro ein festest Bild ausgeben werden, gibt es wieder Daten, dann übernimmt die Funktion wieder.

Danke für Deine Zeit und mühe.

MfG
 
Hallo zoschel,

ich kann von der Arbeit aus leider nicht auf URL zugreifen :)

Ich glaube aber, ich verstehe das Problem.

Fall 1: Wenn die id "#getscript" gar nicht im DOM vorhanden ist, kann man einfach prüfen ob das SPAN-Element existiert:

Javascript:
<script type="text/javascript">
    $(function () {
        function aktualisieren() {
            var res = $('#genre').text();
            if (res != '' && $('#getscript').length > 0) {
                $('p.intro').html('<img src="Bilder/' + res + '.jpg"  width="10%">');
            } else {
                $('p.intro').html('<img src="Bilder/MEINFALLBACKBILD.jpg"  width="10%">');
            }
        }
        aktualisieren();
        var auto_refresh = setInterval(function () {
            aktualisieren();
        }, 5000);
    });
</script>
<div id="bild">
    <p class="intro"></p>
</div>
<p>

Fall 2: Wenn "#getscript" zwar existiert aber leer ist:

Javascript:
<script type="text/javascript">
    $(function () {
        function aktualisieren() {
            var res = $('#genre').text();
            if (res != '' && $('#getscript').text.length > 0) {
                $('p.intro').html('<img src="Bilder/' + res + '.jpg"  width="10%">');
            } else {
                $('p.intro').html('<img src="Bilder/MEINFALLBACKBILD.jpg"  width="10%">');
            }
        }
        aktualisieren();
        var auto_refresh = setInterval(function () {
            aktualisieren();
        }, 5000);
    });
</script>
<div id="bild">
    <p class="intro"></p>
</div>
<p>

Sollte das nicht funktionieren, muss ich mir das ganze nach der Arbeit daheim ansehen.

LG
 
Danke Dir,

Kurz eben beides eingefügt, leider kein Erfolg,

Ja, das wäre nett wenn Du nach der Arbeit mal danach schauen könntest, Es soll dein Schaden nicht sein, gibt's mir deine KN per PN durch;)

Danke Dir sehr für Deine Mühe!!

MfG
 
Hallo zoschel,

ich muss das ganze kurz rekapitulieren.

Auf der Startseite (stream.html) wird zu beginn die js-Datei "info_jsonp.js" inkludiert und ausgeführt. Diese erstellt das Element "span#getscript". Außerdem wird in der "Stream.html" die Funktion "aktualisieren" gefeuert, welche die Bilder darstellt.

Das "Platzhalter"-Bild soll nun nur angezeigt werden, wenn keinerlei auswählbare Datensätze vorhanden sind?

LG
 
Hallo Splater,

Genau so sieht es aus, kommt gar nichts, dann soll in die p.intro ein festes Bild dargestellt werden, sobald aber wieder was an Daten zur Verfügung steht, soll die normal Funktion wieder greifen.,
Schau dir doch bitte mal die info_jsonp.js an, vielleicht hiflt es weiter, den dort wird das alles generiert.

LG
 
Ich hab noch mal was geändert, sieht einfacher aus, geht auch soweit, nur halt noch das alte Problem,
wenn keine Daten anliegen kommt ein:
Code:
TypeError: Cannot read property 'title' of undefined
Wobei 'title' nicht entscheidend ist, vielmehr die ganze Funktion
Code:
function radioTitle()

Und genau wenn das nicht vorhanden ist, soll ein Bild in die class p.intro geschrieben werden, ist die Fuktion wieder da, soll alles laufen wie gehabt.
Hier der neue Code
HTML:
<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
function radioTitle() {
jQuery.ajax({
        url: "http://webjab.de:9500/status-json.xsl",
        //force to handle it as text
        dataType: "text",
        async: true,
        success: function(data) {

        //data downloaded so we call parseJSON function
        //and pass downloaded data
        var json = jQuery.parseJSON(data);
      
        //now json variable contains data in json format
        //let's display a few items
        //jQuery('#genre').text(json.icestats.source.genre);
        // this is the element we're updating that will hold the track title
        jQuery('#title').text(json.icestats.source.title);
        // this is the element we're updating that will hold the listeners count
        //jQuery('#listeners').text(json.icestats.source.listeners);
    //Genre
        jQuery('#genre').text(json.icestats.source.genre);

   }
   });
   };

jQuery(document).ready(function() {
    setTimeout(function(){radioTitle();}, 2000);
    setInterval(function(){radioTitle();}, 3000);
     //   return false;

});
</script>
<span id="genre"></span>:::<span id="title"></span>
<script type="text/javascript">
$(function () {
     function aktualisieren() {
         var res = $('#genre').text();
         if (res != '') {
         $('p.intro').html('<img src="Bilder/' + res + '.jpg"  width="10%">');
   }
}
        aktualisieren();
        var auto_refresh = setInterval(function () {
            aktualisieren();
        }, 5000);
});
</script>
<div id="bild">
<p class="intro"></p>
</div>
</body>
</html>

Vielleicht könnte mir jemand weiter helfen, vielen Dank für Eure Zeit und Mühe.

hier noch die html dazu http://webjab.de:9500/stream3.html
MfG
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück