div-Klasse, die php-Datei inkludiert, automatisch neu laden

  • Bei include sollte ein Serverpfad hin. Wie gesagt, __FILE__ sollte in die Richtung gehen, dirname() könnte helfen, in $_SERVER stehen auch nützliche Angaben.
    Für include mit URLs brauchts einen Wrapper der bei dir aber nicht verfügbar ist. ;-)

    Und zum prinzipiell noch, dann mach ich Schluss für heute: Per Ajax lädst du eben nur den Inhalt nach, der dann in das <div> eingefügt werden soll. Dein PHP-Script, was du per Ajax-Request (im Prinzip eben ein einfacher GET-Request) aufrufst, sollte also ausschließlich dieses HTML-Fragment zurück liefern, was später im <div> landen soll. Eventuell solltest du die Funktion auf mehrere Scripte aufteilen - eins zum Includen in WP, eins für den Ajax-Request usw.

    *Arno zustimm und seinen Rat jetzt auch umsetz* :-D

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hatte auch schon dran gedacht, dass beim Refresh nur eine "reine" html-Datei benutzt werden darf. Werd mich morgen drum kümmern und deine hilfreichen Vorschläge einbeziehen.

    *arno zustimm und auf der tastatur einschlaf :-D*

  • So. Einmal drüber schlafen und ein Tag Pause haben mich tatsächlich schon sehr viel weiter gebracht :-D

    Die URLs beziehen sich jetzt auf die Serveradresse und auch sonst habe ich alle "störenden" php-Variablen entfernt, sodass man die die Datei jetzt auch schön im Browser betrachten kann.

    Jetzt muss ich nur noch das jQuery richtig zum Laufen bringen :mrgreen:
    Der Vollständigkeit halber poste ich das script noch mal:

    PHP
    <?php wp_enqueue_script('jquery');?>
        <script type="text/javascript">
        jQuery(document).ready(function(){ 
        jQuery("a#refresh").click(function(){
        jQuery("#claggbox").load("<?php bloginfo ('template_url') ?>/clagg/clagg-display.php");
        });  
        });        
        </script>

    Naja, und dann halt noch der Link, der so aussieht:

    PHP
    <a id="refresh">Auffrischen</a>

    Brauche ich da überhaupt ein "href"? Ich habe es einfach mal rausgelassen :-D
    Woran liegt es, dass das jQuery nicht funktioniert?
    Ich hab's sogar vor dem wp_head eingebaut, weil irgendwo stand, dass das wichtig ist.

  • Scheinbar klappt das mit dem Link nicht, obwohl ich nun ja auch eine id statt einer class verwende.
    Ich habe gerade getestet, ob es mit einem simplen "alert" funktioniert, aber das ging auch nicht.

    [Update] Wenn ich

    PHP
    jQuery("a").click(function(){

    verwende, klappt es. Nur wenn ich versuche, die spezielle id zu wählen, geht es nicht mehr. Wie kann das sein?

  • Doch, geht. Hab' ich doch tatsächlich die ganze Zeit "a.refresh" benutzt. Aaaah!
    Gibt es ein Emoticon für :Kopf auf die Tischplatte hau? :mrgreen:

    Ach ja: Bis jetzt funktioniert es nur mit dem "alert", mit der "load"-Funktion (s.o.) noch nicht. Woran kann das liegen?

  • Mmh, funktioniert doch, oder nicht? Laut Firebug kommt das hier:

    HTML
    <form action="" method="post" style="color: #c07; width: 890px; border: none; font-size: 1.2em; font-family: Arial; display: block; line-height: 1.5em; background: #eee;">
    	<input type="text" name="clagg_text" style="color: #c07; width: 890px; border: none; font-size: 1.2em; font-family: Arial; display: block; line-height: 1.5em; background: #eee;" size="105" maxlength="100" id="clagg_text" value="Testreihe #2" />
    	<span class="clagg_meta" style="font-size: 0.8em; font-family: Georgia, serif; line-height: 1em; color: #000">Ge&auml;ndert um 19:25 | <a href="#" id="refresh">Auffrischen</a></span>
    </form>


    als Response zurück und wird in das <div> eingebettet.

    Übergib mal beim Aufruf des Scripts noch einen zufälligen Parameter (z.B. aktuellen Timestamp) um Caching zu vermeiden.

  • Den Timestamp habe ich an die URL der zu ladenden Datei im Script angehängt, aber das Script wird ja nicht neu geladen.

    Bei mir geht es im IE und im Firefox nicht (das ist glaube ich das erste Mal, wo bei mir im IE einmal etwas funktioniert! :))

    Wie kann ich das caching sonst noch verhindern? Ich möchte es nicht im <head> ganz abschalten, sonst lädt die Seite so langsam.

  • Also 1x gehts bei mir (im FF 3.5), es kommt allerdings derselbe Inhalt der bereits in der Seite vorhanden ist nochmal rein. Daher siehts so aus als würde nichts passieren. Ich hätte deshalb jetzt zuerst an Caching gedacht.

    Das es nicht nochmal geht ist auch klar - du ersetzt den gesamten Inhalt, also auch deinen Link an den das Click-Event gebunden ist. Du müsstest also das Click-Event nochmal an den (neuen) Link binden.
    Besser wärs aber, wenn nur der Text-Inhalt ersetzt würde und der Refresh-Link nicht beeinflusst wird.

  • Das erste Mal funktioniert das Script tatsächlich, ich ändere immer den Text im einen Browser und klicke im anderen auf den Link.

    Aber wie kann ich mit der Variable arbeiten? Wenn ich sie im zu refreshenden Inhalt habe, funktioniert das Skript nicht mehr, wenn sie außerhalb ist, ändert sich die Variable nicht mehr.

  • Welche Variable? Ich rede nur von dem Refresh-Link, da hängt doch keine Variable dran? Falls du einen variablen Wert im Text hast (die Nummer?), dann lies den doch vor dem Request aus und schicke ihn im Request als Parameter mit.

  • Das es nicht nochmal geht ist auch klar - du ersetzt den gesamten Inhalt, also auch deinen Link an den das Click-Event gebunden ist. Du müsstest also das Click-Event nochmal an den (neuen) Link binden.
    Besser wärs aber, wenn nur der Text-Inhalt ersetzt würde und der Refresh-Link nicht beeinflusst wird.

    Der Link, durch den das Click-Event ausgelöst wird, wird ja einerseits von Anfang an in die Seite included, auf der anderen Seite befindet er sich nach dem Refresh wieder in der Datei, die nachgeladen wird, ich verstehe deshalb nicht, warum ich das Click-Event an einen zweiten Link binden muss, es gibt ja gar keinen zweiten Link.

    Allerdings ist an dieser These schon was dran, denn wenn ich den Link aus der div-Klasse rausziehe, funktioniert das Script so oft ich es anklicke.

  • Der Link, durch den das Click-Event ausgelöst wird, wird ja einerseits von Anfang an in die Seite included, auf der anderen Seite befindet er sich nach dem Refresh wieder in der Datei, die nachgeladen wird, ich verstehe deshalb nicht, warum ich das Click-Event an einen zweiten Link binden muss, es gibt ja gar keinen zweiten Link.


    Nein, der Link, an den du das Event gebunden hast, ist weg. In dem Moment wo der Content im Container ersetzt wird. Ab da ist ein neuer Link in dem Container, ohne gebundenes Click-Event. Er hat zwar dieselbe ID, das wars aber auch schon. Das Event wird aber an ein Element gebunden, nicht an eine ID. Und das Element ist eben nicht mehr dasselbe. Klar?

  • Ah, Ok. Verstanden.
    Wenn ich das richtig sehe, gibt es somit auch keine Möglichkeit, das Event mit dem neuen Element zu verknüpfen, außer ihm eine neue ID zuzuweisen und diese auch ins Script einzubauen. In meinem Fall erweist sich das jedoch leider als nicht durchsetzbar.

    Also werde ich den Link außerhalb platzieren müssen.

    Trotzdem danke ich dir ganz herzlich für all die Hilfe, ist ja echt Wahnsinn, wie viel Mühe du dir gemacht hast :-D

    Wenn ich deine Arbeitsstunden bezahlen müsste...
    Nein, daran denke ich besser nicht :mrgreen:

  • Wenn ich das richtig sehe, gibt es somit auch keine Möglichkeit, das Event mit dem neuen Element zu verknüpfen, außer ihm eine neue ID zuzuweisen und diese auch ins Script einzubauen. In meinem Fall erweist sich das jedoch leider als nicht durchsetzbar.


    Du müsstest einfach nach dem Laden des Inhalts erneut das hier aufrufen:

    Code
    jQuery("a#refresh").click(function(){
    Zitat

    Wenn ich deine Arbeitsstunden bezahlen müsste...
    Nein, daran denke ich besser nicht :mrgreen:


    Ich schreib dir ne Rechnung... :twisted:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!