Seite bei Formular mit "post" nicht neu laden mit XMLHttpRequest


Dragosius

Erfahrenes Mitglied
Kann ich dir eventuell von dem Testsystem die Zugangsdaten schicken, denn als Gast sieht man den Fehler ja nicht, da man als Gast die Shoutbox nicht sieht.
 

Dragosius

Erfahrenes Mitglied
Jetzt habe ich mich doch für eine fertige Lösung entschieden, da ich nun endlich Eine gefunden habe, die man auch super anpassen.
Bei dem chaotischen Code von mir ist ja kein Land in Sicht.

Ich habe das hier gefunden:
Demo: Making a Shoutbox with PHP and jQuery

Das einzige Problem dabei ist, dass man keine 2 Nachrichten nacheinander abschicken kann, ohne dass man die Seite nach dem 1. Kommentar neu laden muss.
Kann man das Problem dort irgendwie beheben?

Vielen Dank
 

Sempervivum

Erfahrenes Mitglied
Da sehe ich dieses im Code:
Code:
           // Allow a new comment to be posted after 5 seconds
            setTimeout(function(){
                canPostComment = true;
            }, 5000);
Wenn man 5 sec wartet sollte es eigentlich gehen.
 

Dragosius

Erfahrenes Mitglied
Das funktioniert leider nicht.
Ich habe den Teil auskommentiert und die Variable ein paar Zeilen darüber außerhalb dieser Abfrage auf true gesetzt.
 

Sempervivum

Erfahrenes Mitglied
Das sieht dort aber ein wenig anders aus: Die Variable heißt canReload, wenn das die Funktion beschreibt wird das Reload für 5 s blockiert.
Auf der Tutorialseite heißt sie dagegen canPostComment, wenn das ebenfalls die Funktion beschreibt ist das etwas anderes.
 

Dragosius

Erfahrenes Mitglied
Kannst du es denn mal testen?
Selbst wenn ich die Zeit abwarte, geht es nicht.
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
<form action="<?php echo filter_input(INPUT_SERVER, 'REQUEST_URI'); ?>"
Hier htmlentities nutzen. Ich weiß nicht, warum du hier filter_input nutzt ohne drittes optionales Argument nutzt:

https://www.php.net/filter_input hat gesagt.:
Falls dieser Parameter ausgelassen wird, so wird FILTER_DEFAULT verwendet, was zu FILTER_UNSAFE_RAW äquivalent ist. Dies wird dazu führen, dass keine Filterung stattfindet.
 

Dragosius

Erfahrenes Mitglied
Das wird bei der aktuellen Shoutbox nicht mehr verwendet.
Mir ging es da übrigens um keinen Filter, sondern einfach, dass das Formular immer auf die aktuelle Seite angewendet wird.
 

Sempervivum

Erfahrenes Mitglied
Wenn man den Debugger benutzt, löst sich das Rätsel:
Beim Abschicken der Nachricht wird geprüft, ob der Name nicht leer ist:
Code:
if(name.length &&
Beim Abschicken wird aber das Name-Element leer gemacht:
Code:
    function publish(name,comment){
   
        $.post('shoutbox/publish.php', {name: name, comment: comment}, function(){
            nameElement.val("");
            commentElement.val("");
            load();
        });

    }
D. h. wenn man es noch Mal versucht, ist das if nicht erfüllt und die Nachricht wird nicht gesendet.
 

Dragosius

Erfahrenes Mitglied
Vielen Dank, das war es.
Die Shoutbox hatte ursprünglich auch ein Eingabefeld für den Name.
Das habe ich aber auf "hidden" gestellt und setze dort automatische den Benutzername von eingeloggten Benutzer.
 

Neue Beiträge