I am trying to make a very simple php chat for my website with CodeIgniter and Ajax. The messages are saved in a html file, not in a database table. Whenever I click the send button, the page refreshes, even though it's not supposed to and I don't know what's wrong.
Here is my controller code:
class Chat_con extends CI_Controller
{
function construct()
{
parent::_construct();
}
public function index()
{
$this->load->model('login_model');
$d['info'] = $this->login_model->display_user_data(); //this info is sent to view to display the username of the person who is using the chat
$d['message'] = $this->read_conv();
$this->load->view('chat_view',$d);
}
function write_conv()
{
$this->load->helper('directory');
$this->load->helper('url');
$this->load->helper('file');
$this->path = "application" . DIRECTORY_SEPARATOR . "files" . DIRECTORY_SEPARATOR;
$this->file = $this->path . "log.html";
$m = $this->input->post('usermsg');
$u = $this->session->userdata('username');
write_file($this->file, "<div class='msgln'>(" . date("g:i A") . ") <b>" . $u . "</b>: " . stripslashes(htmlspecialchars($m)) . "<br></div>", 'a');
$this->index();
}
function read_conv()
{
$this->load->helper('directory');
$this->load->helper('url');
$this->load->helper('file');
$this->path = "application" . DIRECTORY_SEPARATOR . "files" . DIRECTORY_SEPARATOR;
$this->file = $this->path . "log.html";
$string = read_file($this->file);
return $string;
}
}
Part of my view:
<div id="chatbox"><?php echo $message; ?></div> <!-- this is the div where the messages are displayed -->
<-- this is the form -->
<form name="message" id="message"action="<?php echo base_url();?
>chat_con/write_conv" method='post'>
<input name="usermsg" type="text" id="usermsg" size="63" /> <input
name="submitmsg" type="submit" id="submitmsg" value="Send" />
</form>
The javascript
<script type="text/javascript">
$(document).ready(function() {
$("#message").submit(function(e) {
e.preventDefault();
var postData = $(#message).serializeArray();
var formActionURL = $(this).attr("action");
$.ajax({
url: formActionURL,
type: "POST",
data: postData,
}).done(function(data) {
alert("success");
}).fail(function() {
alert("error");
}).always(function() {
$("#submitmsg").val('submit');
});
});
}
</script>