dazle
@dazle
Хороший электрик, но в душе программист

В чате не удаляются сообщения, т.к если вложить в файл ajax запроса другой ajax запрос этот запрос не работает. Можно ли найти др. альтернативу?

У меня простенький чат который посредством js и ajax запроса выводит список сообщений.
//Функция отправки сообщения
 function send()
 {
 //Считываем сообщение из поля ввода с id mess_to_add
 var mess=$("#mess_to_send").val();
 // Отсылаем паметры
 $.ajax({
 type: "POST",
 url: "shablon/add_mess.php",
 data:"mess="+mess,
 // Выводим то что вернул PHP
 success: function(html)
 {
 //Если все успешно, загружаем сообщения
 load_messes();
 //Очищаем форму ввода сообщения
 $("#mess_to_send").val('');
 }
 });
 }
 
 
 //Функция загрузки сообщений
 function load_messes()
 {
 $.ajax({
 type: "POST",
 url: "shablon/load_messes.php",
 data: "req=ok",
 // Выводим то что вернул PHP
 success: function(html)
 {
 //Очищаем форму ввода
 $("#messages").empty();
 //Выводим что вернул нам php
 $("#messages").append(html);
 //Прокручиваем блок вниз(если сообщений много)
 var chat_scroll = $('.mes');
    chat_scroll.scrollTop(chat_scroll.prop('scrollHeight'));
 }
 });
 }
 setInterval(load_messes,1000);

Я хотел бы сделать админ панель которая удаляла бы нужное мне сообщение (крестик напротив каждого сообщения).
Я добавляю в файл load_messes.php (который выводит все сообщения на экран) тег с крестиком:
include("bd.php");
//Выбираем все сообщения
$res=mysql_query("SELECT * FROM `messages` ORDER BY `id` ");
//Выводим все сообщения на экран

while($d=mysql_fetch_array($res))
{  
echo $d['login'].": ".$d['message'];
echo '<div class="delmes" data-mes="' . $d['id'] . '">&#10006</div>';// - тег с крестиком
}

Ajax запрос на передачу id сообщения при клике:
$(function (){
$('.delmes').on('click', function (){
	var idmes = $(this).attr('data-mes'); 
 $.ajax({
 type: "POST",
 url: "shablon/dekommes.php",
 data: "req=ok",
 data: {"idmes":idmes},
 success: function(text){}
 });
   });
   });

Вот файл который удаляет сообщение (при клике на крестик возле сообщения) dekommes.php:
include("bd.php");
$id=$_POST['idmes'];
		
$res="DELETE FROM `messages` WHERE `id`=$id ";
mysql_query($res);

Код рабочий когда не вложен в другой ajax запрос. У меня он работает на комментариях там без ajax запроса просто перенаправляет на страницу формы через header("Location:../det.php"); Есть ли альтернатива удалять сообщения из чата?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Насколько я понял, проблема в динамически подгружающихся элементах, на которых не срабатывает функция по удалению(ha-ha, classic). Это (не)происходит по тому что когда вы вешали листенеры на эти крестики, этих элементов на странице еще не было, соответственно на них ничего не слушается. Для таких случаев делается иначе, слушается событие на более высоком по иерархии элементе(чаще всего не заморачиваются и слушают document), отлавливая только события пересекающиеся с элементами с нужными свойствами, нарпимер в вашем случае достаточно поменять:
$(function (){
$(document).on('click', '.delmes',function (){
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы