Permalänk
Medlem

Updatera endast en div

Som vissa av er säkert har sätt så hållar jag på med en chat sida/board. Nu efter att jag har byggt om sidan lite så tänkte jag lägga till en funktion som automatiskt uppdaterar innehållet i en DIV. Men det verkar inte fungera som tänkt, istället uppdateras hela sidan på nytt.

Jag har kollat runt en hel del och har inte hittat någon vettig lösning för just mitt projekt.

Diven ser ut såhär:

<div id="roombody"><?php include("include/roombody.php");?></div>

Och jag har även provat något i stil med:

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roombody').load('room.php').fadeIn("slow"); }, 1500); <div id="roombody"><?php include("include/roombody.php");?></div> </script>

Jag misstänker att delen där det står "room.php" bör bytas ut mot länken man är på. Men oavset hur jag gör så får jag det inte att funka.
Antingen så uppdaterar hela sidan sig eller så försvinner allt som hämtas in ifrån "include/roombody.php"

Skulle vara tacksam om någon kunde hjälpa mig lösa detta eller hänvisa mig till en sida som beskriver en lösning

Permalänk
Medlem
Permalänk
Medlem
Skrivet av Bosnic:

Som vissa av er säkert har sätt så hållar jag på med en chat sida/board. Nu efter att jag har byggt om sidan lite så tänkte jag lägga till en funktion som automatiskt uppdaterar innehållet i en DIV. Men det verkar inte fungera som tänkt, istället uppdateras hela sidan på nytt.

Jag har kollat runt en hel del och har inte hittat någon vettig lösning för just mitt projekt.

Diven ser ut såhär:

<div id="roombody"><?php include("include/roombody.php");?></div>

Och jag har även provat något i stil med:

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roombody').load('room.php').fadeIn("slow"); }, 1500); <div id="roombody"><?php include("include/roombody.php");?></div> </script>

Jag misstänker att delen där det står "room.php" bör bytas ut mot länken man är på. Men oavset hur jag gör så får jag det inte att funka.
Antingen så uppdaterar hela sidan sig eller så försvinner allt som hämtas in ifrån "include/roombody.php"

Skulle vara tacksam om någon kunde hjälpa mig lösa detta eller hänvisa mig till en sida som beskriver en lösning

Det är inte så lämpligt att lägga en div-tag mellan script-taggar.

Det är svårt att tolka din kod. Vad är roombody? Är det hela sidan eller bara en liten div med text på sidan?
Jag skulle även skippa din php-kod (includes) och endast köra med javascript. Jag ser inte poängen med att ladda datat på två olika sätt.

1. Dålig källa.
2. Han kör redan Ajax genom jQuery med hjälp av kommandot .load()

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Det är inte så lämpligt att lägga en div-tag mellan script-taggar.

Det är svårt att tolka din kod. Vad är roombody? Är det hela sidan eller bara en liten div med text på sidan?
Jag skulle även skippa din php-kod (includes) och endast köra med javascript. Jag ser inte poängen med att ladda datat på två olika sätt.

roombody är ett php script som ska hämta in alla inlägg och den kör sedan en echo på det den har hämtat ut

Permalänk
Medlem

W3Schools bör man hålla sig undan: http://w3fools.com/

Permalänk
Medlem
Skrivet av Bosnic:

roombody är ett php script som ska hämta in alla inlägg och den kör sedan en echo på det den har hämtat ut

Jag menar roombody-diven, inte php-filen i det fallet.

Du verkar använda både roombody.php och room.php för att ladda data till samma div. Vad är det för skillnad på dessa två?

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Jag menar roombody-diven, inte php-filen i det fallet.

Du verkar använda både roombody.php och room.php för att ladda data till samma div. Vad är det för skillnad på dessa två?

Jag misstänker att mitt problem ligger där mer eller mindre, room.php är filen som hela sidan ligger på. Och jag har försökt ändra den men oavset hur jag gör så visas antingen inga inlägg eller så uppdateras hela sidan.

När man är inne i ett "chatrum" så är man inne i länken "room.php?r=(Rummets ID)" Den här länken har inte funkat heller, så jag vet inte riktigt vad eller hur jag ska göra för att få den att inte uppdatera hela sidan.

Permalänk
Medlem
Skrivet av Bosnic:

Jag misstänker att mitt problem ligger där mer eller mindre, room.php är filen som hela sidan ligger på. Och jag har försökt ändra den men oavset hur jag gör så visas antingen inga inlägg eller så uppdateras hela sidan.

När man är inne i ett "chatrum" så är man inne i länken "room.php?r=(Rummets ID)" Den här länken har inte funkat heller, så jag vet inte riktigt vad eller hur jag ska göra för att få den att inte uppdatera hela sidan.

Borde du inte köra?

$('#roombody').load('include/roombody.php').fadeIn("slow");

Då gör den ju samma sak som första gången du laddar sidan.

Tror inte fadeIn fungerar på din div då den redan är synlig. Du får gömma den först då skulle jag tro.

Sen ska väl inte <div> ligga i <script>. Flytta ut den.

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roombody').load('include/roombody.php').fadeIn("slow"); }, 1500); </script> <div id="roombody"><?php include("include/roombody.php");?></div>

Permalänk
Medlem
Skrivet av agentq15:

Borde du inte köra?

$('#roombody').load('include/roombody.php').fadeIn("slow");

Då gör den ju samma sak som första gången du laddar sidan.

Tror inte fadeIn fungerar på din div då den redan är synlig. Du får gömma den först då skulle jag tro.

Sen ska väl inte <div> ligga i <script>. Flytta ut den.

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roombody').load('include/roombody.php').fadeIn("slow"); }, 1500); </script> <div id="roombody"><?php include("include/roombody.php");?></div>

Verkar ha fått den att låta bli att uppdatera hela sidan men nu måste jag lösa delen med vilken länk som ska uppdateras. För nu försvinner allt i den diven då den uppdateras. Ska se om man lyckas få det att funka innan man tar lunch.

Permalänk
Medlem
Skrivet av Bosnic:

Verkar ha fått den att låta bli att uppdatera hela sidan men nu måste jag lösa delen med vilken länk som ska uppdateras. För nu försvinner allt i den diven då den uppdateras. Ska se om man lyckas få det att funka innan man tar lunch.

Ja .load() laddar ju in innehållet som den hämtar i din valda div. Lägg in en div till i den första div:en och döp till något annat id och sen kör .load() till den istället.

Permalänk
Medlem
Skrivet av agentq15:

Ja .load() laddar ju in innehållet som den hämtar i din valda div. Lägg in en div till i den första div:en och döp till något annat id och sen kör .load() till den istället.

Så något såhär då eller, eller har jag missuppfattat dig ?

$('#hämtainfodiv').load('#stoppaininfodiv');

Jobbar väldigt sällan med javascript så är en hel del som är nytt för mig

Permalänk
Avstängd

Lustigt att folk reagerar på när folk länkar w3schools. Men ingen mer än jag reagear på hur jQuery överanvänds. jQuery ska enbart användas för vynära logik, här borde du köra en MVVM ramverk istället.. Typ Knockout, eller Backbone

Vi behöver en jQuery fools sida!

Visa signatur
Permalänk
Medlem
Skrivet av Bosnic:

Så något såhär då eller, eller har jag missuppfattat dig ?

$('#hämtainfodiv').load('#stoppaininfodiv');

Jobbar väldigt sällan med javascript så är en hel del som är nytt för mig

Ja nästan. Fast inte använda ä i namnet och ha php-filen inom .load() som du hade förut.
.load() hämtar ju och kör filen du sätter där. Så en fil med:

<?php echo "hej"; ?>

Skriver alltså ut hej.

Något sånt här:

$('#getinfodiv').load('phpfilen.php');

Permalänk
Medlem

helt otestat, men detta kanske funkar för dig?

$('<div>').load('include/roombody.php', function() { $('#roombody').append($(this).fadeIn('slow')); });

idé härifrån.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

helt otestat, men detta kanske funkar för dig?

$('<div>').load('include/roombody.php', function() { $('#roombody').append($(this).fadeIn('slow')); });

idé härifrån.

Kommer ju lägga till samma sak om och om igen efter varandra varje gång han vill uppdatera.
Om detta nu fungerar så är det inte .append() han ska använda utan .html() vilket väl .load() gör som standard.

Permalänk
Avstängd

Finns det inget bra pushramverk för PHP? Jag använder alltid SignalR för saker som detta för att pusha ut JSON till klienterna

Visa signatur
Permalänk
Medlem
Skrivet av agentq15:

Ja nästan. Fast inte använda ä i namnet och ha php-filen inom .load() som du hade förut.
.load() hämtar ju och kör filen du sätter där. Så en fil med:

Jo det förstår jag, var bara ett exempel som jag kom med för att visa hur jag tänker

Jag har hittills kommit så långt att jag har fått den att hämta filen utan att hela hemsidan uppdateras men dock så uppdateras inte heller den diven som borde det.

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roompost').load('include/roombody.php'); }, 1500); </script> <div id="roombody"><?php include("include/roombody.php");?></div>

Diven "#roompost" finns inne i "include/roombody.php". Den lagrar alla inläggen och de visas sedan upp i "#roombody".
Kan mitt problem nu vara att den försöker skriva till en div som ligger i den fil som den hämtar info ifrån. Och på sätt råkar tömma den och ingenting uppdateras?

Permalänk
Medlem
Skrivet av Bosnic:

Jo det förstår jag, var bara ett exempel som jag kom med för att visa hur jag tänker

Jag har hittills kommit så långt att jag har fått den att hämta filen utan att hela hemsidan uppdateras men dock så uppdateras inte heller den diven som borde det.

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roompost').load('include/roombody.php'); }, 1500); </script> <div id="roombody"><?php include("include/roombody.php");?></div>

Diven "#roompost" finns inne i "include/roombody.php". Den lagrar alla inläggen och de visas sedan upp i "#roombody".
Kan mitt problem nu vara att den försöker skriva till en div som ligger i den fil som den hämtar info ifrån. Och på sätt råkar tömma den och ingenting uppdateras?

Du hämtar ju samma sak igen då eftersom #roompost finns i include/roombody.php. Då får du dubbla #roompost andra gången den kör eftersom du då laddar in en ny #roompost i nuvarande #roompost.

Din php-fil borde bara skriva ut resultatet. Nu känns det som den skriver ut alldeles för mycket. Hur ser include/roombody.php ut?

Känns som vi försöker fixa något som är feltänkt ifrån början. :/

Du har en div du vill ha data i. Då använder du .load() precis som du har men hämta enbart datan i php-filen. Inte massa html-kod osv.
Allt i den div:en du kör .load()till kommer bytas ut mot innehålllet php-filen svarar med.

Men som sagt visa include/roombody.php så blir det mycket lättare att lösa problemet!

Permalänk
Medlem
Skrivet av agentq15:

Du hämtar ju samma sak igen då eftersom #roompost finns i include/roombody.php. Då får du dubbla #roompost andra gången den kör eftersom du då laddar in en ny #roompost i nuvarande #roompost.

Din php-fil borde bara skriva ut resultatet. Nu känns det som den skriver ut alldeles för mycket. Hur ser include/roombody.php ut?

Känns som vi försöker fixa något som är feltänkt ifrån början. :/

Du har en div du vill ha data i. Då använder du .load() precis som du har men hämta enbart datan i php-filen. Inte massa html-kod osv.
Allt i den div:en du kör .load()till kommer bytas ut mot innehålllet php-filen svarar med.

Men som sagt visa include/roombody.php så blir det mycket lättare att lösa problemet!

require ("script/connect_mysql.php"); $gethead = mysql_query("SELECT * FROM post WHERE RoomID='$roomnr' ORDER BY Date DESC"); $postcount = mysql_num_rows($gethead); // count the output amount if ($postcount > 0) { while($row = mysql_fetch_array($gethead)){ $postid = $row["ID"]; $user = $row['User']; $text = $row["Text"]; $date = $row["Date"]; $printpost .= ' <div class="roompost"> <div style="float: left; margin-left: 20px; margin-top: 5px;">'.$user.'</div> <div style="float: right; margin-right: 20px; margin-top: 5px;">'.$date.'</div> <div style="margin-top:30px; margin-left: 20px; margin-bottom: 10px;">'.$text.'</div> </div> '; } } mysql_free_result($gethead); echo $printpost;

Misstänker att jag får skriva om en del. Inne i roombody.php så hämtar den ut info ifrån databasen vilket läggs in i #roompost

Permalänk
Medlem
Skrivet av Bosnic:

require ("script/connect_mysql.php"); $gethead = mysql_query("SELECT * FROM post WHERE RoomID='$roomnr' ORDER BY Date DESC"); $postcount = mysql_num_rows($gethead); // count the output amount if ($postcount > 0) { while($row = mysql_fetch_array($gethead)){ $postid = $row["ID"]; $user = $row['User']; $text = $row["Text"]; $date = $row["Date"]; $printpost .= ' <div class="roompost"> <div style="float: left; margin-left: 20px; margin-top: 5px;">'.$user.'</div> <div style="float: right; margin-right: 20px; margin-top: 5px;">'.$date.'</div> <div style="margin-top:30px; margin-left: 20px; margin-bottom: 10px;">'.$text.'</div> </div> '; } } mysql_free_result($gethead); echo $printpost;

Misstänker att jag får skriva om en del. Inne i roombody.php så hämtar den ut info ifrån databasen vilket läggs in i #roompost

Det där såg ju bra ut om det enbart är det som finns i roombody.php.
Då borde du ha $('#roombody') som selector i din javascript-kod. Vad blev det för problem när du hade det?

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roombody').load('include/roombody.php'); }, 1500); </script> <div id="roombody"><?php include("include/roombody.php");?></div>

Permalänk
Medlem
Skrivet av agentq15:

Kommer ju lägga till samma sak om och om igen efter varandra varje gång han vill uppdatera.
Om detta nu fungerar så är det inte .append() han ska använda utan .html() vilket väl .load() gör som standard.

du har helt rätt. jag fantiserade ihop att servern kollade exempelvis sessions-id eller liknande och bara skickar "nya" grejjer när man laddar...
jag har lite livlig fantasi ibland.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av agentq15:

Det där såg ju bra ut om det enbart är det som finns i roombody.php.
Då borde du ha $('#roombody') som selector i din javascript-kod. Vad blev det för problem när du hade det?

Så fort den försöker uppdatera så försvinner allt innehåll i .roompost och #roombody blir tom. Any ideas ?

Permalänk
Medlem
Skrivet av Bosnic:

Så fort den försöker uppdatera så försvinner allt innehåll i .roompost och #roombody blir tom. Any ideas ?

Kolla Javascript-konsollen i webbläsaren. Finns det några errors?

Permalänk
Medlem
Skrivet av agentq15:

Kolla Javascript-konsollen i webbläsaren. Finns det några errors?

Nej inte vad jag kan se/hitta. Kollade i både Chrome och Firefox

Permalänk
Medlem

funderar lite på den här raden:

$gethead = mysql_query("SELECT * FROM post WHERE RoomID='$roomnr' ORDER BY Date DESC");

sätter du $roomnr på något sätt när du anropar från javascriptet?

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

funderar lite på den här raden:

$gethead = mysql_query("SELECT * FROM post WHERE RoomID='$roomnr' ORDER BY Date DESC");

sätter du $roomnr på något sätt när du anropar från javascriptet?

Jag har en funktion i room.php som automatiskt plockar fram $roomnr och eftersom jag kör "include" på "roombody.php" filen så läggs de ihop i samma fil och då kan man hämta ut data från rätt ställe i databasen

if(isset($_GET["r"])) { $roomnr = $_GET["r"]; } else if(!isset($_GET["r"])) { header ("location: index.php"); exit(); }

Permalänk
Medlem
Skrivet av Bosnic:

Jag har en funktion i room.php som automatiskt plockar fram $roomnr och eftersom jag kör "include" på "roombody.php" filen så läggs de ihop i samma fil och då kan man hämta ut data från rätt ställe i databasen

ok, men hur får du fram $roomnr om du anropar include/roombody.php direkt (som du ju gör i javascriptet)?
min gissning är att den är tom och att du därför inte får någon träff i databasen och därmed töms din div på innehåll...

jag har ju redan nämnt att jag har livlig fantasi.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

ok, men hur får du fram $roomnr om du anropar include/roombody.php direkt (som du ju gör i javascriptet)?
min gissning är att den är tom och att du därför inte får någon träff i databasen och därmed töms din div på innehåll...

jag har ju redan nämnt att jag har livlig fantasi.

Om jag inte har fel så finns $roomnr fortfarande kvar i "room.php" och när "roombody.php" refreshar är det bara att hämta värdet eftersom det aldrig ändras och därför finns kvar?

Sen att du har livlig fantasi är bara ett stort + ! Har själv löst vissa problem förr med lite fantasi när inget annat gick

Permalänk
Medlem

när javascriptet anropar include/roombody.php, så är det ju bara den filen och ingen annan som körs. room.php körs ju bara när du anropar den.
testa att skriva in http://<servernamn>/include/roombody.php och se om du får något innehåll i svaret från servern.

jag är ingen direkt hejare på PHP, men jag gissar att du måste knåpa in något sån här typ:

roombody.php;

if (empty($roomnr)){ $roomnr = intval($_GET['r'], 10); } require ("script/connect_mysql.php"); $gethead = mysql_query("SELECT * FROM post WHERE RoomID='$roomnr' ORDER BY Date DESC"); // osv...

room.php(?);

var auto_refresh = setInterval( function () { $('#roombody').load('include/roombody.php?r=' + <?php echo $roomnr; ?>); }, 1500);

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

room.php(?);

room.php är filen där du hittar:

if(isset($_GET["r"])) { $roomnr = $_GET["r"]; } else if(!isset($_GET["r"])) { header ("location: index.php"); exit(); }

och

<script type="text/javascript"> var auto_refresh = setInterval( function () { $('#roombody').load('include/roombody.php'); }, 1500); </script> <div id="roombody"><?php include("include/roombody.php");?></div>

Sen närden refreshar så hämtar den bara $roomnr ifrån sidan den redan är på, dvs room.php Hade det inte funkat så hade jag aldrig kunnat se några inlägg alls.

Inläggen dyker upp men försvinner så fort javascriptet försöker uppdatera.