Beiträge von Sempervivum

    BTW: Hoffentlich bekomme ich jetzt keine Abmahnung, weil ich fertigen Code gepostet habe :) Aber wir haben es ja zuvor mit dem Hinweis auf Stackoverflow versucht, wo es ein fertiges Beispiel gibt, aber der TO konnte es nicht auf seine Seite übertragen.

    Das Kernproblem, warum dein Layout nicht so funktioniert, wie es soll, ist, dass Du dieses

    Code
    <div class="all">

    drin hast. Diesem hättest Du display:flex geben müssen.
    Außerdem fehlt der Doctype.

    Code
    <div class="body">

    ist etwas verwirrend. Ich empfehle, statt dessen das main-Tag zu verwenden, das semantisch dafür vorgesehen ist.


    Dann würde das HTML so aussehen:

    und das CSS so:

    und das Layout müsste das sein, was Du dir vorstellst:

    Header oben, Footer unten und der grau hinterlegte Inhalt füllt den Raum dazwischen aus.

    • Wie oben schon geschrieben, ist calc für alle Maßeinheiten möglich, d. h. auch für die Höhe.
    • Wenn Du Flexlayout verwendest, wie in dem Beispiel bei Stackoverflow, brauchst Du kein calc, weil der Browser automatisch die richtige Höhe berechnet.

    Das erledigt man besser mit Flexlayout, damit sich die Höhe des Content-Bereiches automatisch anpasst, so dass er den verfügbaren Platz zwischen Header und Footer genau ausfüllt. Es ist immer ungünstig, mit festen Abmessungen zu arbeiten, weil man dann die Berechnungen jedes Mal anpassen muss, wenn sich an der Höhe des Header oder des Footer etwas ändert.

    Wenn ich dich richtig verstanden habe, sollte das mit zwei Funktionen möglich sein:

    Code
    function func1() {
        // Hier der Code, der "vorher schon geschrieben sein soll"
    }
    
    function func2() {
        // dies ist die Funktion, die laufen soll, damit func1() aufgerufen wird
        // einfach func1 aufrufen
        func1();
        // weitere Aktionen in func2
    }

    Zu einfach? Wenn es nicht das ist, was Du meinst, beschreibe es genauer.

    Das Programmieren an sich erlernen kannst Du auch mit den Syntax einer Bibliothek. Vor 30, 40 Jahren meinten die Leute, man könne nur "richtig" Programmieren lernen, wenn man eine Assemblersprache erlernt und Hochsprachen wie Pascal oder C erst Mal außen vor lässt. Und wer redet heute noch von Assembler ...?

    Zitat

    Ich habe genau 1 Modal:


    Für jeden Nachricht wird automatisch ein neues erstellt.

    Ist das nicht ein Widerspruch? Wenn für jede Nachricht ein neues erstellt wird, werden es doch mehrere?

    Du verwendest ja Bootstrap und das macht es schon mit Javascript.
    Ich habe das Ganze mal auf das Wesentliche reduziert und ein Demo gemacht, dort kannst Du ablesen, wie die Übergabe über ein data-Attribut funktioniert:

    Wenn Du es mit PHP machen möchtest, so ist das auch möglich, indem Du für jede Nachricht ein eigenes Modal definierst und über dessen ID und data-target jeweils das richtige öffnest, so wie ich es ebenfalls in dem vorigen Thread beschrieben hatte.

    Der Sachverhalt ist noch der gleiche wie in dem vorigen Thread: Da das Modal durch Javascript geöffnet wird, kann die Übergabe der Daten auch nur durch Javascript erfolgen, jedenfalls wenn Du nur ein Modal für alle Texte haben willst. Die Lösung auf PHP-Seite zu suchen, führt nicht zum Ziel, wie man an der ergebnislosen Diskussion dort sieht. Und die Lösung ist ebenfalls die selbe, die ich schon in dem vorigen Thread gepostet habe:

    https://getbootstrap.com/docs/3.3/javascript/

    Offenbar unterstützt der IE 11 die kurze Notation für das forEach nicht:

    Code
    data.items.forEach(item => {

    Verwendet man die althergebrachte funktioniert es:

    Code
    data.items.forEach(function(item) {

    html-seminar.de/woltlab/attachment/1636/

    Ein guter Editor und sinnvolles Einrücken bringen es an den Tag:

    Da wo das beanstandete Semikolon steht muss ein Komma hin.

    Weil dein Code nicht eingerückt war, habe ich mich offenbar getäuscht: Die weitere Bearbeitung steht offenbar doch im success-Callback.

    Jetzt musst Du die Definiton von gItem vor das forEach schieben:

    Code
                    console.log(data);
                    var gItem = '';
                    data.items.forEach(item => {
                        console.log(item.title, item.link, item.enclosure.link);
                                    
                          var itemTitle = item.title.text;
                          var itemLink = item.link;
                          var itemImage = item.enclosure.link;

    Zwei Probleme sehe ich auf Anhieb:

    1. Die Variable gItem ist lokal innerhalb der forEach-Schleife definiert. Daher ist sie außerhalb der Schleife nicht sichtbar und ein Zugriff würde einen "undefined"-Fehler liefern.
    2. Selbst wenn Du die Variable gItem global definieren würdest, würde es nicht funktionieren, weil Ajax asynchron arbeitet: Die Anfrage wird an den Server gesendet, etwas später trifft die Antwort mit den Daten ein. Greifst Du jetzt auf das Ergebnis direkt im Anschluss an den Ajax-Aufruf zu, so ist die Antwort vom Server noch nicht da und die Inhalte in der Variablen nicht vorbesetzt.

    Lösung: Alles was die Variable gItem mit Inhalt benötigt, ebenfalls im success-Callback erledigen. Wenn dir der Code dann zu unübersichtlich wird, kannst Du die Aktionen in eine Funktion schreiben und diese als Callback-Funktion übergeben.