Chatbox ajax post returnt hele index
Opgelost: Het probleem zat hem in de file die include werd (shout.php) daarin zaten queries die niet werktte.
Ik probeer een chat script werkend te krijgen maar heb wat problemen ermee. Ik heb in mijn index een router die in een bepaalde map kijkt en de pagina include als deze bestaat.
Deze javascript code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
// load messages every 1000 milliseconds from server.
load_data = {'fetch':5000};
window.setInterval(function()
{
$.post('./bedrijven/pagina/shout.php', load_data, function(data)
{
$('.message_box').html(data);
var scrolltoh = $('.message_box')[0].scrollHeight;
$('.message_box').scrollTop(scrolltoh);
});
}, 1000);
load_data = {'fetch':5000};
window.setInterval(function()
{
$.post('./bedrijven/pagina/shout.php', load_data, function(data)
{
$('.message_box').html(data);
var scrolltoh = $('.message_box')[0].scrollHeight;
$('.message_box').scrollTop(scrolltoh);
});
}, 1000);
Hij include nu in de chatbox de hele index pagina in plaats van enkel de code te returnen die in shout.php staat. Hoe kan ik ervoor zorgen dat deze enkel mijn code uit shout.php teruggeeft? Is er misschien een functie om de overige code zoals css en js includes,footer,menu eruit te halen, lijkt me wel wat zwaar aangezien die elke miliseconden het bestand aanroept om te zien of er nieuwe messages zijn.
Alvast bedankt voor het lezen!
Gewijzigd op 05/08/2015 21:58:03 door Furio Scripting
Houd het lightweight en zorg dat alleen relevante data (bijvoorbeeld in JSON-formaat) wordt geretourneerd, en niet een complete pagina...
Je javascript code plaatsen heeft geen nut, want dat gaat alleen maar over ophalen/laden. Post liever je shout.php, maar als ik het goed leest, dan doel je waarschijnlijk op html en alles, dan zou die dus in shout.php moeten staan en kun je die er gewoon uithalen.
DavY Blaat op 05/08/2015 15:20:00:
Je javascript code plaatsen heeft geen nut, want dat gaat alleen maar over ophalen/laden. Post liever je shout.php, maar als ik het goed leest, dan doel je waarschijnlijk op html en alles, dan zou die dus in shout.php moeten staan en kun je die er gewoon uithalen.
Dit is de php code van shout.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
$database = new database();
if($_POST)
{
//connect to mysql db
//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
die();
}
if(isset($_POST["message"]) && strlen($_POST["message"]) > 0 )
{
//sanitize user name and message received from chat box
//You can replace username with registerd username, if only registered users are allowed.
$username = check_input($_POST["username"]);
$message = check_input($_POST["message"]);
$user_ip = $_SERVER['REMOTE_ADDR'];
//insert new message in db
$q = "INSERT INTO shout_box(user, message, ip_address) value('$username','$message','$user_ip')";
$database->query($q);
$msg_time = date('h:i A M d',time()); // current time
echo '<div class="shout_msg"><time>'.$msg_time.'</time><span class="username">'.$username.'</span><span class="message">'.$message.'</span></div>';
// delete all records except last 10, if you don't want to grow your db size!
//mysqli_query($sql_con,"DELETE FROM shout_box WHERE id NOT IN (SELECT * FROM (SELECT id FROM shout_box ORDER BY id DESC LIMIT 0, 10) as sb)");
}
elseif($_POST["fetch"] == 1)
{
$q = "SELECT user, message, date_time FROM (select * from shout_box ORDER BY id DESC LIMIT 10) shout_box ORDER BY shout_box.id ASC";
$results = $database->query($q);
while($row = mysqli_fetch_assoc($results))
{
$msg_time = date('h:i A M d',strtotime($row["date_time"])); //message posted time
echo '<div class="shout_msg"><time>'.$msg_time.'</time><span class="username">'.$row["user"].'</span> <span class="message">'.$row["message"].'</span></div>';
}
}
else
{
header('HTTP/1.1 500 Are you kiddin me?');
exit();
}
} ?>
$database = new database();
if($_POST)
{
//connect to mysql db
//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
die();
}
if(isset($_POST["message"]) && strlen($_POST["message"]) > 0 )
{
//sanitize user name and message received from chat box
//You can replace username with registerd username, if only registered users are allowed.
$username = check_input($_POST["username"]);
$message = check_input($_POST["message"]);
$user_ip = $_SERVER['REMOTE_ADDR'];
//insert new message in db
$q = "INSERT INTO shout_box(user, message, ip_address) value('$username','$message','$user_ip')";
$database->query($q);
$msg_time = date('h:i A M d',time()); // current time
echo '<div class="shout_msg"><time>'.$msg_time.'</time><span class="username">'.$username.'</span><span class="message">'.$message.'</span></div>';
// delete all records except last 10, if you don't want to grow your db size!
//mysqli_query($sql_con,"DELETE FROM shout_box WHERE id NOT IN (SELECT * FROM (SELECT id FROM shout_box ORDER BY id DESC LIMIT 0, 10) as sb)");
}
elseif($_POST["fetch"] == 1)
{
$q = "SELECT user, message, date_time FROM (select * from shout_box ORDER BY id DESC LIMIT 10) shout_box ORDER BY shout_box.id ASC";
$results = $database->query($q);
while($row = mysqli_fetch_assoc($results))
{
$msg_time = date('h:i A M d',strtotime($row["date_time"])); //message posted time
echo '<div class="shout_msg"><time>'.$msg_time.'</time><span class="username">'.$row["user"].'</span> <span class="message">'.$row["message"].'</span></div>';
}
}
else
{
header('HTTP/1.1 500 Are you kiddin me?');
exit();
}
} ?>
Code (php)
1
2
3
4
2
3
4
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
// blablabla //
}
{
// blablabla //
}
Aangezien je in je eerst post zegt dat je menu en footer wilt laten verdwijnen kan je toch ook zorgen dat de menu en footer verdwijnen met deze code.
PHP Maarten op 05/08/2015 15:31:47:
Met dit stukje:
Aangezien je in je eerst post zegt dat je menu en footer wilt laten verdwijnen kan je toch ook zorgen dat de menu en footer verdwijnen met deze code.
Code (php)
1
2
3
4
2
3
4
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
// blablabla //
}
{
// blablabla //
}
Aangezien je in je eerst post zegt dat je menu en footer wilt laten verdwijnen kan je toch ook zorgen dat de menu en footer verdwijnen met deze code.
Ja maar dit bestand wordt elke MILIseconde aangeroepen en om dan elke miliseconde bepaalde html te moeten verwijderen is niet echt snel. Daarnaast pakt die ook al me js includes en css omdat dit natuurlijk ook in mijn index.php staat.
Het mooiste zou zijn als die enkel dat bestand aanroept en niet me gehele index file erbij pakt.
Of 250 miliseconden, maar elke miliseconde is nergens voor nodig.
Als je alles compartimenteert in aparte acties heb je dit probleem niet, lijkt mij.
EDIT: en als je slim bent maak je voor dit soort dingen een soort van shellscript die enkel JSON serveert ofzo.
Gewijzigd op 05/08/2015 15:49:50 door Thomas van den Heuvel
DavY Blaat op 05/08/2015 15:46:31:
Dan is beide het probleem niet, maar je router om pagina's op te halen. Ik heb geen idee hoe die eruit ziet, maar een script van ander gebruiken geeft sowieso altijd koppijn, daarom is het beter je eigen te schrijven. Ik zie dat je dit script hiervandaan hebt: http://www.sanwebe.com/2013/04/creating-shout-box-facebook-style, klopt?
Die tutorial heb ik idd gebruikt en werkt ook goed als je het standalone gebruikt maar dat doe ik niet.
Gewijzigd op 05/08/2015 21:58:39 door Furio Scripting