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
neu zu laden,header ('location:index.php');
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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091<
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
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 anstattprint "var rfx_ids[] = '".$row['id']."'; "\n";
besser soprint "rfx_ids[] = '".$row['id']."'; "\n";
meine refresh.php zum Testen sah so aus
123456789<?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
1234567891011121314151617181920212223242526// ---- 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:
12345678910111213141516$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)
12345678910$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
1234567891011121314151617181920<?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
1234567891011121314<?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ß.