Reputation: 75
I'm using AJAX to build a chat system for a twitch video. The point is to dynamically display the submitted messages without the page being reloaded, and it works. However the messages aren't submitted to my Database and upon page refresh the submitted messages are gone. The ones that i manually inserted in the DB are displayed. Here's my code :
Dashboard.twig :
<script>
$("#forminput").submit(function(e){
var url = "dashboard";
$.ajax({
type: "POST",
url: url,
data: $("#forminput").serialize(),
dataType: 'json', //what is returned
success : function(data)
{
$("#table").append("<tr><td>" + data.name + "</td><td>" + data.comment + "</td></tr>");
}
});
e.preventDefault();
});
DisplayCommentsModel:-
private $name;
private $comment;
public function printComments()
{
$app = \Yee\Yee::getInstance();
$cols = Array ("name", "comment");
$comments = $app->db['db1']->get("comments", null, $cols);
if ($app->db['db1']->count > 0)
{
return $comments;
}
}
AddCommentsModel
private $name;
private $comment;
public function __construct($name, $comment)
{
$this->name = $name;
$this->comment = $comment;
}
public function comment()
{
if ($this->validateEmptyFields() == false)
{
return false;
}
if ($this->validateFilledFields() == false)
{
return false;
}
return true;
}
public function validateEmptyFields()
{
if(empty($this->name) || empty($this->comment))
{
return false;
}
else
{
return true;
}
}
public function validateFilledFields()
{
$nameLenght = strlen($this->name);
$commentLenght = strlen($this->comment);
if($nameLenght < 2 && $commentLenght < 2)
{
return false;
}
return true;
}
public function insertCommentsInDb()
{
$app = \Yee\Yee::getInstance();
$data = array(
"name" => $this->name,
"comment" => $this->comment
);
$app->db['db1']->insert('comments', $data);
}
CommentsController :
public function index()
{
$app = $this->getYee();
$newDisplayCommentsModel = new DisplayCommentsModel();
$comments = $newDisplayCommentsModel->printComments();
$data = array(
'comments' => $comments
);
$app->render('dashboard/dashboard.twig', $data);
}
/**
* @Route('/dashboard')
* @Name('dashboard.post')
* @Method('POST')
*/
public function post()
{
$app = $this->getYee();
$name = $app->request->post('name');
$comment = $app->request->post('comment');
//add to database
$data = array(
'name' => $name,
'comment' => $comment
);
echo json_encode($data);
}
Upvotes: 1
Views: 63
Reputation: 138
$data=json_encode($data); // not need echo
$this->db->insert('tableName',$data); // You forgot this line and this will insert json_format to database
Upvotes: 1
Reputation: 250
In post function in your CommentsController file, you are not inserting data into database. The code section below will just echo back whatever is received.
$data = array(
'name' => $name,
'comment' => $comment
);
echo json_encode($data);
You should call insertCommentsInDb() available in AddCommentsModel before you send back the data
Upvotes: 1