kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: Jquery Aktualisierung mit dynamischem Timer

    geschrieben von coupon

    also man könnte bestimmt auch die JS-Aray Erstellung in eine Datei auslagern,
    und auch diese per jQuery alle paar Minuten neu laden,

    aber macht das Sinn ??? ... so oft wird ja in der Datenbank hoffentlich nichts geändert,
    daher ist das meiner Meinung nach etwas zu viel des Guten, dies auch noch dynamisch zu machen.

    ich würde es so lassen, dass wenn Ändernung in Datenbank (Admin)
    dann muss man eben die index.php neu laden um Änderungen zu sehen


    Idee wäre noch, nach jedem kompletten Durchlauf die index.php
    per PHP
    header ('location:index.php');
    neu zu laden,
    aber auch das ist meiner Meinung nach ganicht nötig,

    Wenn ein Admin eine Änderung macht und diese dann sehen will,
    dann kann man diesem Admin auch den Schritt zumuten
    mal die index.php neu im Browser zu laden (STRG + F5)

    ... alles andere ist wohl mit Kanonen auf Spatzen schießen :)





  • in: Jquery Aktualisierung mit dynamischem Timer

    geschrieben von coupon

    ne passt schon, ich helfe doch immer gerne :)

    noch ne Kleinigkeit,
    wie Du immer die aktuellste jQuery Version nutzen kannst

    http://code.jquery.com/jquery-latest.min.js


    anstatt eine bestimmte Version zu laden

  • in: Jquery Aktualisierung mit dynamischem Timer

    geschrieben von coupon

    ich glaub, ich habs hinbekommen,
    allerdings beginnt die Ausgabe mit dem 2ten Elemet aus Array,
    aber nach letzem Element kommt dann wieder das erste Element

    <html>
    <head>
    <title>TEST</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    
    <?php 
    // ---------------------------------- 
    
    
    // --------- Daten aus Deiner Datenbank holen ------- 
    
    require_once("includes/dbconf.php");
    dbConnect();
    
    $sql2 = "SELECT id,time FROM layer WHERE active='1' ORDER BY RAND()";
    $result2 = mysql_query($sql2);
    
    while($row = mysql_fetch_assoc($result2)) {
    $rowdata[] = $row; 
    }
    
    // --------- von mir genutzes Test Daten Array ------- 
    /* --- 
    $rowdata = array( 
    	array('id' => '1', 'time' => '2000'), 
    	array('id' => '2', 'time' => '10000'), 
    	array('id' => '3', 'time' => '3000'), 
    	array('id' => '4', 'time' => '5000'), 
    	array('id' => '5', 'time' => '4000'), 
    ); 
    --- */
    
    
    
    // ---------------------------------- 
    ?>
    
    
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    
    <script type="text/javascript">
    
    var rfx_ids = new Array();
    var rfx_time = new Array();
    
    <?php 
    // ---------------------------------- 
    
    $y=0; 
    foreach ($rowdata as $row) { 
    print " rfx_ids[".$y."] = '".$row['id']."'; \n";
    print " rfx_time[".$y."] = '".$row['time']."'; \n";
    print "\n";
    $y++; 
    
    }
    
    // ---------------------------------- 
    ?>
    
    var i=0; 
    
    function runloop(i) { 
    	if (rfx_ids.length <= i) { i=0; } 
    	if (i == (rfx_ids.length-1)) { j=0; } else { j = (i+1); } 
    	$("#refresh").load("refresh.php?id=" + rfx_ids[j] + "&time=" + rfx_time[j] + "&ms=" + new Date().getTime());
    	i++; 
    	setTimeout(function(){runloop(i);}, rfx_time[j]); 
    }
    
    $(document).ready(function() { 
    	runloop(i); 
    }); 
    
    
    </script>
    
    </head>
    
    <body bgcolor="#FFFFFF" text="#000000">
    
    <br>
    <br>
    
    <div id="refresh" style="text-align:center;">...</div>
    
    <br>
    <br>
    
    </body>
    </html>


    ... also mit setTimeout() anstatt mit setInterval()


    ein Fehler war auch in der Schleife, wo man das js-Array mit Daten füllt,
    dort darf nicht jedesmal "var" davor stehen

    also anstatt
    print "var rfx_ids[] = '".$row['id']."'; "\n";


    besser so
    print "rfx_ids[] = '".$row['id']."'; "\n";



    meine refresh.php zum Testen sah so aus

    <?php 
    // --------------------------------------------- 
    
    print "<pre style=\"margin:4px; padding:4px; background:#DEDEDE; text-align:left;\">\n"; 
    print_r($_GET);
    print "</pre>\n";
    
    // --------------------------------------------- 
    ?>


    zudem habe ich noch in meiner .htaccess

    Header set Cache-Control "must-revalidate, no-store, no-cache, max-age=0, pre-check=0, post-check=0"
    Header set Pragma "no-cache"


    nur um evtl Browser-Cache bei der Ausgabe zu vermeiden.

    ich hoffe das klappt jetzt besser :)


  • in: Jquery Aktualisierung mit dynamischem Timer

    geschrieben von coupon

    ja ok, das war auch ein Denkfehler von mir,
    die index.php wird ja nur 1x aufgerufen und bleibt dann ja statisch ... :oO

    und nochwas .. ich denke die $ Zeichen im PHP (jquery_code) sollte man auch escapen mit \$

    man könnte gleich alle IDs + Zeiten aus der Datenbank mit Zufall-Sortierung holen
    und dann diese Daten in der index.php im JavaScript in einem Array abarbeiten
    so dass bei jedem Durchlauf ein weiteres Array-Element (ID und Zeit) im jQuery verwendet wird

    also nicht LIMIT 1 sondern gleich alle Daten in der Index einlesen,
    und dann nacheinander abarbeiten, wenn Ende wieder von vorne.

    Dazu einen Zähler im jQuery-Code einführen, der mit 0 (Zahl: Null) beginnt
    mit dem man dann immer die Werte aus dem nächsten Array-Element nimmt
    und Wenn Zähler größer als Anzahl der Datenzätze ... dann wieder von vorne

    hier mal ein Versuch
    // ---- Alle IDs und Zeiten aus MySQL lesen 
    $sql2 = "SELECT id,time FROM layer WHERE active='1' ORDER BY RAND()";
    $result2 = mysql_query($sql2);
    
    print "<script type=\"text/javascript\">\n"; 
    
    print "var rfx_ids = new Array();"\n"; 
    print "var rfx_time = new Array();"\n"; 
    
    while($row = mysqli_fetch_assoc($result)) { 
    print "var rfx_ids[] = '".$row['id']."'; "\n"; 
    print "var rfx_time[] = '".$row['time']."'; "\n"; 
    }
    
    print "var i = 0"; "\n"; 
    
    print "\$(document).ready(function() { "\n"; 
    print "\$(\"#refresh\").load(\"refresh.php?id=\" + rfx_ids[i] + \"&ms=\" + new Date().getTime()); "\n"; 
    print "  var refresh = setInterval(function() { "\n"; 
    print "       i++; "\n"; 
    print "       if (rfx_ids.length < i) { i = 0 } "\n"; 
    print "      \$(\"#refresh\").load(\"refresh.php?id=\" + rfx_ids[i] + \"&ms=\" + new Date().getTime()); "\n"; 
    print "   }, rfx_time[i] ); "\n"; 
    print "}); "\n"; 
    
    print "</script>"\n";


    keine Ahnung ob das funktioniert,
    oder wie man innerhalb setInterval einen Zähler führt
    und mit diesem Zähler dann wiederum auf ein (zwei) Array(s) zugreift.

    die Idee ist
    a) 2 Arrays (je ID und Zeit in Millisekunden) für (in) Javascript erstellen
    b) einen Zähler der je Durchlauf auf das nächste Array-Element zugreift.
    c) wenn Zähler gräßer Anzahl, dann Zähler wieder auf Null zurücksetzen

    evtl. geht das auch mit nur einem (assoziativen) Array oder Objekt ...
    hab's auch nicht getestet, bin kein Javascript-Profi, aber die Idee find' ich gut .... :)
  • in: Jquery Aktualisierung mit dynamischem Timer

    geschrieben von coupon

    hallo


    sorry, mein $jquery_code (oben) war falsch escaped,

    versuch's mal so:

    $sql2 = "SELECT id,time FROM layer WHERE active='1' ORDER BY RAND() LIMIT 1";
       $result2 = mysql_query($sql2);
       $data2 = mysql_fetch_assoc($result2)); 
    
    
    $jquery_code = "<script type=\"text/javascript\">
         $(document).ready(function() { 
    	 
           $(\"#refresh\").load(\"refresh.php?id=".$data2['id']."&ms=\" + new Date().getTime());
           var refresh = setInterval(function() {
              $(\"#refresh\").load(\"refresh.php?id=".$data2['id']."&ms=\" + new Date().getTime());
           }, ".$data2['time'].");
        });
    </script>";
    
    echo $jquery_code;



    PS: innerhalb von $jquery_code = "..."; brauchts Du keine <?php Tags öffnen und schließen,
    das ist ja schon in PHP, muss man nur richtig escaped rein schreiben.

    Alternativ escaped wäre dann so (beachte auch Unterschied bei einfügen PHP Variable)

    $jquery_code = '<script type="text/javascript">
         $(document).ready(function() { 
    	 
           $("#refresh").load("refresh.php?id='.$data2['id'].'&ms=" + new Date().getTime());
           var refresh = setInterval(function() {
              $("#refresh").load("refresh.php?id='.$data2['id'].'&ms=" + new Date().getTime());
           }, '.$data2['time'].');
        });
    </script>
    ';




  • in: Jquery Aktualisierung mit dynamischem Timer

    geschrieben von coupon

    Hallo

    Wenn Deine Hauptseite auch PHP kann
    dann kannst Du ja vorher auslesen, welche Reload-ID als nächstes kommen soll
    plus dazu die Zeil, wie lange der Inhalt zu dieser ID angezeigt werden soll

    und mit diesen Daten den jQuery Reload Code "dynamisch" erstellen,
    also den Zufalls-Generator nicht innerhalb der refresh.php sondern schon vorher auf der Hauptseite
    und dann einen Parameter an die refresh.php übergeben, damit Dir genau diese ID angezeigt wird.

    Dazu muss aber in der Datenbank je Eintrag auch ein Wert mit vorhanden sein für die Zeit

    Also den jQuery Javascript Code "dynamisch" mit PHP erstellen und ausgeben
    <?php 
    // ------------------------------------------ 
    
    // ----- hier eine Ausgabe ID und Zeit aus der Datenbank per Zufall auswählen 
    // ----- als Ergebnis: z.B. Array $res mit ID und die Zeit in Millisekunden
    
    $jquery_code ="<script type=\"text/javascript\">
    	 $(document).ready(function() {
    	   $("#refresh").load("refresh.php");
    	   var refresh = setInterval(function() {
    	      $("#refresh").load('refresh.php?id=' + $res['id'] + '&ms=' + new Date().getTime());
    	   }, ".$res['microtime']."); 
    	});
    </script>
    '; 
    
    echo $jquery_code; 
    
    // ------------------------------------------ 
    ?>


    EDIT ... Achtung ... Fehler bei escape ... alle " im jQuery Code müssen escaped werden: \"
    BSP: $("#refresh") ---> $(\"#refresh\")

    korrigierter Code siege unten ...

    und dann in der refresh.php keine Auswahl per Zufall (die war ja schon vorher)
    sondern genau die vorher ermittelte (und per GET übergebene) ID ausgeben

    <?php 
    // --------------------------------------------------- 
    // ---- vorher Verbindung zu MySQL herstellen wegen mysql_real_escape_string()
    
    $if (!empty($_GET['id'])) { 
    $run_id = mysql_real_escape_string($_GET['id']); 
    
    $sql = "SELECT * FROM .... WHERE id = '".$run_id."' LIMIT 1"; 
    
    // --- usw. --- Ausgabe der Daten --- 
    }
    
    // --------------------------------------------------- 
    ?>


    Noachmal als kurze Zusammenfassung:

    1. Auswahl der ID + Zeit in der Hauptseite (MySQL select RANDOM)
    2. jQuery Code dynamisch mit Zeit und ID als GET-Parameter ausgeben
    3. in der refresh.php je nach GET-Parameter 'id' den Inhalt ausgeben

    viel Spaß.

Login zum Webhosting ohne Werbung!