Pagina continu updaten
Hoe kun je met php een pagina om de x seconden updaten zonder dat het opvalt dat de pagina opnieuw geladen wordt?
Eigenlijk zoals dat in de Facebook-chat bijvoorbeeld gebeurt.
Maar op sich is PHP niet geschikt voor een drukke chat. Dan kan je beter naar Sockets kijken.
Ik gebruik het volgende, maar je ziet de pagina zichtbaar refreshen:
Code (php)
1
2
3
4
5
2
3
4
5
<script type="text/javascript">
setTimeout(function(){
window.location.href = window.location.href;
},1000)
</script>
setTimeout(function(){
window.location.href = window.location.href;
},1000)
</script>
Hoe voorkom ik dat je het zichtbaar ziet refreshen?
Gewijzigd op 13/01/2016 11:23:56 door Daan Vee
Dat komt doordat je met window.location.href de complete webpagina vervangt en niet slechts de "kleine dingen".
Gebruik AJAX als je alleen de inhoud van specifieke onderdelen wilt vervangen.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$draaiboekID = $_GET['draaiboekID'];
$search_draaiboeken = mysql_query("SELECT * FROM draaiboeken WHERE draaiboekID = '".$draaiboekID."'");
$result_draaiboeken = mysql_fetch_assoc($search_draaiboeken);
echo $result_draaiboeken['naam'];
?>
$draaiboekID = $_GET['draaiboekID'];
$search_draaiboeken = mysql_query("SELECT * FROM draaiboeken WHERE draaiboekID = '".$draaiboekID."'");
$result_draaiboeken = mysql_fetch_assoc($search_draaiboeken);
echo $result_draaiboeken['naam'];
?>
Hoe kan ik dit met Ajax dan steeds verversen?
- Gebruik geen '*', maar selecteer wat je wilt selecteren
- http://phppot.com/jquery/jquery-div-auto-load-and-refresh/ <- Probeer hiermee te puzzelen
mysqli_real_escape_string.
SQL Injection is mogelijk, kijk eens naar Gewijzigd op 13/01/2016 15:06:41 door Marthijn Buijs
Met het volgende script laad ik een div opnieuw:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<script>
$(document).ready(function(){
setInterval(function(){
$("#loadscript").load('shared/loadscript.php?draaiboekID=<? echo $draaiboekID; ?>')
}, 2000);
});
</script>
$(document).ready(function(){
setInterval(function(){
$("#loadscript").load('shared/loadscript.php?draaiboekID=<? echo $draaiboekID; ?>')
}, 2000);
});
</script>
Dat werkt, inclusief draaiboekID etc.
Maar kan het kloppen dat jQuery-scripts die ik run op loadscript.php niet werken in de pagina waarin ik het bovenstaande script heb staan?
Want op loadscript.php werkt het script, maar in de pagina met script die de <div> laadt niet...
PS: De short-tag voor PHP is echt afgeraden. De kans is groot dat deze bij een update van PHP uit kan staan waarbij al je source open en bloot zal staat, incl. eventuele passworden!)
In loadscript.php gaat mijn php-code informatie laden uit de database die vervolgens in een jQuery sortable script wordt weergegeven....
Gewijzigd op 21/01/2016 11:52:17 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$query = "SELECT * FROM items WHERE draaiboekID = '".$draaiboekID."' AND del = '0' ORDER BY volgorde ASC";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
// hier een lijst met het resultaat met de info in DIVjes, waarbij ook jQuery sortable wordt gebruikt
}
?>
$query = "SELECT * FROM items WHERE draaiboekID = '".$draaiboekID."' AND del = '0' ORDER BY volgorde ASC";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
// hier een lijst met het resultaat met de info in DIVjes, waarbij ook jQuery sortable wordt gebruikt
}
?>
Moet ik dan de $query met een $.ajax() laden en de rest laten staan? Of wat bedoel je, Arien? Heb je misschien een voorbeeld-linkje?
In de sortable-fucntie kan je in de update-event prima een $.ajax() request gebruiken, naar loadscript.php.
Gewijzigd op 21/01/2016 12:17:15 door - Ariën -
Ik heb nu dus het bovenstaande script in draaiboek.php staan.
De query kan ik uitvoeren in loadscript.php
Maar waar laat ik de while(); ? Gewoon in draaiboek.php?
Misschien is het handiger om te vertellen wat voor data je precies wilt ophalen, zodat we daar beter een goed passende output aan kunnen geven.
Die onderwerpen staan dmv <div> in een lijstje en kunnen tov elkaar verschoven worden.
En dat schuiven werkt al en wordt gesaved.
Maar er kunnen meerdere gebruikers aan 1 draaiboek werken (op verschillende computers), en dus moet er steeds ge-update worden.
En dat wil ik maken.
https://linssen.me/entry/extending-the-jquery-sortable-with-ajax-mysql/
Je haalt dus de volgorde op met MySQL en schrijft de nieuwe volgorde weg via een AJAX-request in de update-event.
Gewijzigd op 21/01/2016 12:41:09 door - Ariën -
Ik moet het alleen zo maken dat wanneer iemand anders op een andere computer iets aan de volgorde veranderd, dat dat ook meteen zichtbaar is op MIJN scherm.
Dus tussendoor moet ik de laadquery zien up te daten...
Persoonlijk denk ik meer aan iets in de vorm van een versiesysteem.
Maar hoe doe ik dat dan met een andere AJAX-request? Voer ik dan de query opnieuw uit en update de rest dan vanzelf?
Gewijzigd op 21/01/2016 13:18:32 door - Ariën -