Обучение/Помощь новичкам | отправка сообщения в модельном окне
всем привет, парюсь целый день не могу понять . как сделать что бы при отправки сообщения в модельном окне оно не езакрывалась?
пробовал через аякс js не получается
поучается толко когда отправляю сообщение оно выводится тоько после обновления страницы,
это если с ajax,
кто шарит помочь ?
это вывод коментариев с формой
это сама форма komm.php
________
посл. ред. 19.08.2026 в 12:55; всего 1 раз(а); by pyrokinesis
пробовал через аякс js не получается
поучается толко когда отправляю сообщение оно выводится тоько после обновления страницы,
это если с ajax,
кто шарит помочь ?
это вывод коментариев с формой
php
echo '<div id="modalComments" class="modal">
<div class="modal-content">
<button class="close-btn">×</button>
<h2>Комментарии</h2>';
// Перед подключением
$_GET['id'] = $diary['id'];
include_once __DIR__ . '/../blog/komm.php';
echo '</div>
</div>'; это сама форма komm.php
php
if (isset($user) && ($us['id']==$user['id'] || $user['level']>$us['level'] || $diary['readers']==0 || ($diary['readers']==1 || $diary['readers']==2) && mysql_result(mysql_query("SELECT COUNT(*) FROM `frends` WHERE (`user` = '$user[id]' AND `frend` = '$us[id]') OR (`user` = '$us[id]' AND `frend` = '$user[id]')"),0)!=0))
{
echo '<form method="post" action="?id=' . (int)$diary['id'] . '" id="commentForm">';
echo '<textarea name="msg"></textarea><br />';
echo '<input value="Отправить" type="submit" />';
echo '</form>'
}; javascript
<script>
document.addEventListener('submit', function(e) {
var form = e.target;
if (!form) return;
// ловим только нашу форму
if (form.id !== 'commentForm') return;
console.log('CAPTURED submit for commentForm');
e.preventDefault();
e.stopPropagation();
var formData = new FormData(form);
var actionUrl = form.getAttribute('action');
fetch(actionUrl, {
method: 'POST',
body: formData,
headers: { 'X-Requested-With': 'XMLHttpRequest' }
})
.then(function(r){ return r.text(); })
.then(function(html){
console.log('AJAX response:', html.slice(0, 200));
// НЕ трогаем модалку, просто не даём странице перезагрузиться.
// (и оставляем текущее содержимое как есть)
})
.catch(function(err){ console.error(err); });
}, true); // true = capture
</script> ________
посл. ред. 19.08.2026 в 12:55; всего 1 раз(а); by pyrokinesis
Поменяй на это
javascript
<script>
document.addEventListener('submit', function(e) {
const form = e.target;
if (!form || form.id !== 'commentForm') {
return;
}
e.preventDefault();
e.stopPropagation();
const button = form.querySelector('input[type="submit"]');
const textarea = form.querySelector('textarea[name="msg"]');
if (!textarea || textarea.value.trim() === '') {
return;
}
const formData = new FormData(form);
const actionUrl = form.getAttribute('action');
if (button) {
button.disabled = true;
button.value = 'Отправка...';
}
fetch(actionUrl, {
method: 'POST',
body: formData,
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
})
.then(function(response) {
if (!response.ok) {
throw new Error('HTTP ошибка: ' + response.status);
}
return response.text();
})
.then(function(html) {
console.log('Комментарий отправлен');
/*
* Получаем из ответа обновленный список комментариев
*/
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
const newCommentsList = doc.querySelector('#commentsList');
const currentCommentsList = document.querySelector('#commentsList');
if (newCommentsList && currentCommentsList) {
currentCommentsList.innerHTML = newCommentsList.innerHTML;
} else {
console.warn('Не найден #commentsList');
}
/*
* Очищаем поле
*/
textarea.value = '';
/*
* Модальное окно НЕ закрываем
*/
const modal = document.getElementById('modalComments');
if (modal) {
modal.style.display = 'block';
}
})
.catch(function(error) {
console.error('Ошибка AJAX:', error);
alert('Не удалось отправить комментарий');
})
.finally(function() {
if (button) {
button.disabled = false;
button.value = 'Отправить';
}
});
}, true);
</script>
В komm.php вывод комментариев сделай так
php
<div id="commentsList">
<?php
// Здесь твой существующий цикл вывода комментариев
?>
</div> php
$id_diary = $_GET['id'];
// далее используйте $id_diary
$isAjax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
if (isset($_POST['msg']) && isset($user) && isset($us) && isset($diary)) {
$msg = esc(stripcslashes(htmlspecialchars($_POST['msg'])));
if (isset($_POST['translit']) && $_POST['translit'] == 1) {
$msg = translit($msg);
}
if (strlen2($msg) > 1024) {
$err = 'Сообщение слишком длинное';
} elseif (strlen2($msg) < 2) {
$err = 'Короткое сообщение';
} elseif (mysql_result(mysql_query("SELECT COUNT(*) FROM `diary_komm`
WHERE `id_diary` = '$diary[id]' AND `id_user` = '$user[id]' AND `msg` = '".mysql_real_escape_string($msg)."' LIMIT 1"), 0) != 0) {
$err = 'Ваше сообщение повторяет предыдущее';
} else {
// --- права ---
$isOwner = ($us['id'] == $user['id']);
$canByLevel = ($user['level'] > $us['level']);
$readers = (int)$diary['readers'];
$allowAllReaders = ($readers === 0);
$allowFriendReaders = ($readers === 1 || $readers === 2);
$areFriends = false;
if ($allowFriendReaders) {
$q = mysql_query("
SELECT COUNT(*)
FROM `frends`
WHERE (`user` = '$user[id]' AND `frend` = '$us[id]')
OR (`user` = '$us[id]' AND `frend` = '$user[id]')
");
$areFriends = (mysql_result($q, 0) != 0);
}
$can = $isOwner || $canByLevel || $allowAllReaders || ($allowFriendReaders && $areFriends);
if (!$can) {
if ($isAjax) {
echo "NO_ACCESS";
exit;
}
// если не AJAX — можно оставить как было (или вывести ошибку)
$err = 'Нет доступа';
} else {
mysql_query("INSERT INTO `diary_komm` (`id_diary`, `id_user`, `time`, `msg`)
values('$diary[id]', '$user[id]', '$time', '".my_esc($msg)."')");
mysql_query("UPDATE `user` SET `balls` = '".($user['balls']+1)."' WHERE `id` = '$user[id]' LIMIT 1");
if ($user['id'] != $us['id']) {
if ($user['pol'] == 1) {
$pol = ' оставил ';
} else {
$pol = ' оставила ';
}
mysql_query("INSERT INTO `jurnal` (`id_user`, `id_kont`, `msg`, `time`) values(
'0',
'$us[id]',
']$user[nick] $pol комментарий к дневнику /]$diary[name]',
'$time'
)");
}
$q = mysql_query("SELECT * FROM `frends` WHERE `user` = '$user[id]' AND `lenta_blog` = '1' AND `i`='1'");
while ($f = mysql_fetch_array($q)) {
$a = mysql_fetch_array(mysql_query("SELECT * FROM `user` WHERE `id` = '$f[frend]' LIMIT 1"));
$msg_lenta = "Добавил комментарий в дневнике /]$diary[name]";
mysql_query("INSERT INTO `lenta` (`id_user`, `id_kont`, `msg`, `time`) values('$user[id]', '$a[id]', '$msg_lenta', '$time')");
}
if ($isAjax) {
// ВАЖНО: верни HTML заново для комментариев.
// Самый простой путь: повторно подтяни твой komm.php вывод комментариев.
// У тебя уже есть include_once .../blog/komm.php выше — сделай аналогично тут.
$_GET['id'] = $diary['id'];
include_once __DIR__ . '/../blog/komm.php';
exit;
}
msg('Комментарий успешно оставлен');
}
}
}
elseif (isset($_GET['del']) && mysql_result(mysql_query("SELECT COUNT(*) FROM `diary_komm` WHERE `id` = '".intval($_GET['del'])."' AND `id_diary` = '$diary[id]'"),0))
{
if (isset($user) && ($user['level']>=3 || $user['id']=$diary['id_user']))
{
mysql_query("DELETE FROM `diary_komm` WHERE `id` = '".intval($_GET['del'])."' LIMIT 1");
msg('Комментарий успешно удален');
}
} php
msg('Комментарий успешно оставлен'); срабатывал в модельном окне , и выводились ошибки , поможешь ?
php
msg('Комментарий успешно оставлен'); срабатывал в модельном окне , и выводились ошибки , поможешь ?