Reputation: 1647
I'm having trouble getting this <div>
to automatically update using jQuery. It's essentially a chat feature that would have the page refresh every two seconds. I've tried several variances of this with no luck, so completely rewriting it differently is more than welcome.
jQuery code:
function updateChat() {
$.get("chat_data.php", function(data) {
$("div#chattable").html(data);
});
window.setTimeout("updateChat();", 2000);
}
$(document).ready(function() {
updateChat();
});
Here's the <div>
code, which gets the data from chat_data.php
. This should be updating:
<div id="chattable">
<?php include("js/chat_data.php"); ?>
</div>
chat_data.php:
<?php foreach($query->result() as $row):
echo "<div class='chatrow'>";
echo "<div class='chattime'>".date("[M.d] g:ia",strtotime($row->time))."</div>";
echo "<div class='chatnamematch'>[".$row->name."]</div>";
echo "<div class='chatbody'>".$row->body."</div>";
echo "</div>";
endforeach; ?>
Upvotes: 1
Views: 2436
Reputation: 267067
The error that you get, of Call to a member function result() on a non-object in /var/www/js/chat_data.php on line 1
means that the variable $query
is not being set correctly. You said you were using CodeIgniter, is so, which folder is the file ajax_data.php
located in? Application/controllers?
Upvotes: 2
Reputation: 60276
A couple of thoughts and an alternative code example. It is hard to tell where your problem is, so these are just a few ideas.
You could move the waiting to your PHP instead of using the javascript timer to re-execute
Try using the simpler jQuery.load() method.
function updateChat() {
$("#chattable").load("chat_data.php", function() { updateChat(); });
}
On the PHP side,
sleep(2); // sleep for two seconds before returning output
The effect is similar, but simplifies it a bit. The updateChat() function is not called until the output is returned.
Well, just an idea. Not sure that it is the right solution, but it could help you isolate your issues (taking out the js timer variable).
Upvotes: 1
Reputation: 2271
Everything looks like it should work. Does the URL in $.get need to be "js/chat_data.php" instead of "chat_data.php"?
Also I would take the php include out of the div because it's just going to load via AJAX anyway.
Upvotes: 2