Loading...
Обучение/Помощь новичкам | отправка сообщения в модельном окне
всем привет, парюсь целый день не могу понять . как сделать что бы при отправки сообщения в модельном окне оно не езакрывалась?
пробовал через аякс 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>
Html , ну не помогло окно не закрывается но отправляет форму после обновление страницы ((((((( может дело в запросе ? вроде делал так



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('Комментарий успешно удален');
}
}
Html , получилось , я запросы перекинул в оснавной файл и заработало , тольк есть еще одна проблема эочу что бы
php
    msg('Комментарий успешно оставлен');   

срабатывал в модельном окне , и выводились ошибки , поможешь ?
pyrokinesis (Сегодня в 14:00)
Html , получилось , я запросы перекинул в оснавной файл и заработало , тольк есть еще одна проблема эочу что бы
php
    msg('Комментарий успешно оставлен');   

срабатывал в модельном окне , и выводились ошибки , поможешь ?
Скинь мне весь код в лс
Онлайн: 5
Время:
Gen. 0.0715
(c) Bym.Guru 2010-2026