Есть index.php который выводит таблицу и на нем расположена кнопка "sumbit" которая отправляет форму в delete.php и удаляет строки отмеченные с помощью "checkbox".Проблема в том что после отправки страница не обновляется , если нажать обновить в браузере "обновить" удаленные строки исчезают но при этому выделенные "checkbox" остаются. Помогает только перезагрузка страницы (и "checkbox" сбрасываются и строки исчезают). Как правильно сделать перезагрузку ? PHP: <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Документ без названия</title> <script type="text/javascript" src="http://yandex.st/jquery/2.1.0/jquery.min.js"></script> <script type="text/javascript" language="javascript"> function call() { var msg = $('#forms').serialize(); $.ajax({ type: 'POST', url: 'delete.php', // Если обработчик лежит не рядом с формой, то здесь следует указать полный путь до него. Например http://example.com data: msg, success: function(data) { $('#results').html(data); }, error: function(xhr, str){ alert('Возникла ошибка: ' + xhr.responseCode); } }); } function add() { location.reload(); } </script> <?php // Подключение login.php require_once 'login.php'; // Соединение с базой данных $db_server = mysqli_connect($db_hostname, $db_username, $db_password); if (!$db_server) die("Невозможно подключиться к MySQL: " . mysqli_error()); mysqli_query($db_server,"SET NAMES utf8"); //Выбор базы данных mysqli_select_db($db_server, $db_database) or die ("Невозможно выбрать базу данных: " . mysqli_error()); // Сам запрос SQL $query = "SELECT id,ip_addr,namepc,pass, passadm FROM vlc ORDER BY ip_addr "; // Выводим таблицу на экран $result = mysqli_query($db_server, $query); echo '<table border="1">'; echo '<thead>'; echo '<tr>'; echo '<th>ID</th>'; echo '<th>IP</th>'; echo '<th>Имя ПК</th>'; echo '<th>Пароль</th>'; echo '<th>Пароль администратора</th>'; echo '</tr>'; echo '</thead>'; echo '<tbody>'; ?><form method="POST" id="forms" action="javascript:void(null);" onsubmit="call()"><?php echo '<input type="submit" action="index.php" name="submitForm" value="Удалить отмеченные" />'; while($data = mysqli_fetch_array($result)) { echo '<tr>'; echo '<td>' . $data['id'] . '</td>'; echo '<td>' . long2ip ($data['ip_addr']) . '</td>'; echo '<td>' . $data['namepc'] . '</td>'; echo '<td>' . $data['pass'] . '</td>'; echo '<td>' . $data['passadm'] . '</td>'; echo "<td width='10px'><input type='checkbox' name='check[]' value=". $data['id'] ."></td>"; echo '</tr>'; } ?></form><?php ?> Код (Text): <?php require_once 'login.php'; $db_server = mysqli_connect($db_hostname, $db_username, $db_password); if (!$db_server) { echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL; exit; } mysqli_select_db($db_server, $db_database); foreach ($_POST['check'] as $item) { $query = "DELETE FROM vlc WHERE id = $item"; $result = mysqli_query($db_server, $query); } ?>
Ну так скажите браузеру, что, после получения ответа от аякса, всем чекбоксам с "галочками" нужно их убрать: Код (Javascript): success: function(data) { $('#results').html(data); $('#forms input:checkbox:checked').attr('checked', false); }, И замените <form method="POST" id="forms" action="javascript:void(null);" onsubmit="call()"> на <form id="forms" method="post" onsubmit="call(); return false"> - так покрасившей будет)
Код (Javascript): function call() { var msg = $('#forms').serialize(); $.ajax({ type: 'POST', url: 'delete.php', // Если обработчик лежит не рядом с формой, то здесь следует указать полный путь до него. Например http://example.com data: msg, success: function(data) { $('#results').html(data); $('#forms input:checkbox:checked').attr('checked', false); }, error: function(xhr, str){ alert('Возникла ошибка: ' + xhr.responseCode); } }); } function add() { location.reload(); } </script> Вставил вот так. Не помогло, checkbox остаются на месте
Неа, воз и ныне там. А можно как то сказать браузеру, что, после получения ответа от аякса перезагрузить страницу ?
Код (Javascript): // ... document.location.reload(); --- Добавлено --- Посмотрите сюда, накидал тест: http://acso.com.ua/test/chk_boxes.php Все работает. --- Добавлено --- Это писец! А где у Вас элемент с id="results"?
Ок. Вот тут: Код (Javascript): success: function(data) { $('#results').html(data); $('#forms input:checkbox:checked').attr('checked', false); }, в случае удачи аякс отдает Вам результаты работы скрипта delete.php, которые Вы пытаетесь скормить несуществующему на странице элементу. Нужно добавить на страницу что-то типа этого: <div id="results"></div> Следующий момент: HTML: <script type="text/javascript" src="http://yandex.st/jquery/2.1.0/jquery.min.js"></script> // я бы заменил на <script src="http://code.jquery.com/jquery-latest.js"></script> // или на <script src="//code.jquery.com/jquery-2.2.4.min.js"></script> А вообще включите консоль (в хроме это комбинация Ctrl-Shift-i) и смотрите, что происходит на странице, в т.ч. ошибки js. Например, можно после получения данных аяксом прописать console.log(data) и увидеть полученный результат в консоли.
Если я верно понял, то ...$('#results').html(data) - это штука выводит результат работы скрипта (тобишь моя таблица с уже удаленными строками) ? И мне нужно где нибудь в конце скрипта добавить блок div куда этот результат и записывается ?
Никакая таблица не возвращается, по крайней мере я этого не увидел в скрипте delete.php. Короче, если я правильно понимаю, попробуйте так: Код (Javascript): success: function(data) { document.location.reload(); }, перед function call() { напишите: Код (Javascript): $(document).ready(function(){ $('#forms input:checkbox:checked').attr('checked', false); }); В итоге, после успешного аякса, страница будет перезагружена. При загрузке страницы мы говорим браузеру, что все чекбоксы с "галочками" должны эти "галочки" убрать. Также для формы нужно указать HTML: <form method="POST" id="forms" onsubmit="call(); return false" autocomplete="off">
Спасибо большое, заработала хреновина. Имеет вот такой вид у меня Код (Javascript): <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" language="javascript"> $(document).ready(function(){ $('#forms input:checkbox:checked').attr('checked', false); }); function call() { var msg = $('#forms').serialize(); $.ajax({ type: 'POST', url: 'delete.php', data: msg, success: function(data) { document.location.reload(); }, error: function(xhr, str){ alert('Возникла ошибка: ' + xhr.responseCode); } }); } </script>