Создание движка на MVC. Заканчиваем работу с чатом.
Здравствуйте, дорогие читатели. Продолжим создание нашего движка и чата.
Откроем файл default.js.
// ...
$.post(url, data, function(o) {
$("#listInserts").append('<div>' + o.text + '<a href="#" class="del" rel="'+ o.id +'">X</a></div>');
}, 'json');
Добавьте также ссылку на удаление и в цикле.
$("#listInserts").append('<div>' + o[i].text + '<a href="#" class="del" rel="'+ o[i].id +'">X</a></div>');
Теперь добавим обработку клика по ссылке на удаление сразу после цикла.
$('.del').click(function() {
delItem = $(this);
var id = $(this).attr('rel');
$.post('dashboard/xhrDeleteListing', {'id': id}, function(o) {
$("#listInserts").append('<div>' + o.text + '<a href="#" class="del" rel="'+ o.id +'">X</a></div>');
delItem.parent().remove();
}, 'json');
return false;
});
В файле dashboard_model.php добавим вывод json данных в функции xhrInsert.
// ...
$sth->execute(array(':text' => $text));
$data = array('text' => $text, 'id' => $this->db->lastInsertId());
echo json_encode($data);
Также добавим метод для удаления сообщений.
public function xhrDeleteListing() {
$id = $_POST['id'];
$sth = $this->db->prepare('DELETE FROM data WHERE id = "'.$id.'"');
$sth->execute();
}
И, конечно же, создадим контроллер с таким же именем в файле dashboard.php
public function xhrDeleteListing() {
$this->model->xhrDeleteListing();
}
Теперь сообщения добавляются, удаляются, но не все. Те, которые мы только что добавили, мы удалить не можем. Давайте это исправим, благо с помощью JQuery делается это очень легко.
$('.del').live('click', function() {
// код
});
Т.е. мы просто заменяем метод click на метод live.
Итак, наш очень простой чат уже работает.
Спасибо за внимание и удачи!
-
- Михаил Русаков
Комментарии (5):
Не работает js скрипт удаления(
Ответить
Все работает.
Ответить
А так же нужно писать LIMIT 1 в подобных запросах! Что за не оптимизированный запрос? Так будет граммотно: $sth = $this->db->prepare('DELETE FROM `data` WHERE `id` = "'.$id.'" LIMIT 1');
Ответить
вот так будет работать: $(document).on('click','.del', function(){ delItem = $(this); var id = $(this).attr('rel'); $.post('dashboard/xhrDeleteListing', {'id': id}, function() { delItem.parent().remove(); }); return false; });
Ответить
Функция удаления ничего не возвращает. Заменил на $(document).on('click', '.del',function() { delItem = $(this); var id = $(this).attr('rel'); $.post('xhrDeleteListing', {'id': id}); delItem.parent().remove(); return false; });
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.