AngelLeo
@AngelLeo
Вечный поиск знаний!

Как обновить часть сайта, без перезагрузки при работе Aajax?

Всем доброго времени.
Уважаемые знатоки, есть 1 страничный сайт, на сайте есть форма для записи в базу и форма для вывода из базы.
Данные добавляются через Ajax, без перезагрузки.
Как обновить форму вывода данных, без перезагрузки странички. (Перезагрузить только 1 блок).
Перепробовал кучу вариантов из сети, или не работает или обновляется но слетают стили в обновленном блоке.
Код примера странички:
<?php
$db_HOST = 'localhost';
$db_USER = 'root';
$db_PASSWORD = '';
$db_NAME = 'help';
$mysqli = @new mysqli ($db_HOST, $db_USER, $db_PASSWORD, $db_NAME);
if ($mysqli->connect_errno) {
  $info = "База данных недоступна. Ошибка: " . $mysqli->connect_errno;
}	else {
 $mysqli->query ("SET NAMES 'utf8'");
 $info = "Успешно подключена. База: " . $db_NAME;
}

if (isset($_POST['send'])) {
  $lineone = $_POST['lineone'];
  $linetwo = $_POST['linetwo'];
  $query = mysqli_query ($mysqli, "INSERT INTO `bd` (`lineone`, `linetwo`) VALUES ('$lineone', '$linetwo');");
}

?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>help</title>
    <script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
    <style media="screen">
    * {
      margin: 0;
      padding: 0;
    }
      .info {
        width: 100%;
        background: pink;
        text-align: center;
      }
      .insertBd {
        margin: 50px;
        width: auto;
        background: #a2f558;
        text-align: center;
      }
      .insertBd input {
        width: 200px;
        margin: 10px;
      }
      .Bd {
        background: #ff9360;
        display: grid;
        grid-template-columns: 1fr 1fr;
        margin: 50px;
      }
      .Lone, .Ltwo {
        border: 1px solid black;
        margin: 15px;
        text-align: center;
        padding: 5px;
      }
    </style>
  </head>
  <body>
    <div class="info">.Инфо.</div>
    <div class="insertBd">
      <input type="text" id="lineone" name="lineone" placeholder="Строка 1"><br>
      <input type="text" id="linetwo" name="linetwo" placeholder="Строка 2"><br>
      <input type="submit" id="send" name="send">
    </div>
    <div class="Bd">
      <?php $query = mysqli_query($mysqli, "SELECT * FROM bd "); ?>
        <div class="Lone">Строка 1</div>
        <div class="Ltwo">Строка 2</div>
      <?php
        while ($row = mysqli_fetch_array($query)) {
          $id = $row['id'];
      ?>
        <div class="Lone"><?php echo $row['lineone'] ?></div>
        <div class="Ltwo"><?php echo $row['linetwo'] ?></div>
      <?php }; ?>
    </div>
  </body>
  <script type="text/javascript">
    $(document).ready(function(){
      function funcBefore() {
        $(".info").text("Ожидание данных");
      }
      function funcSuccess(data) {
        $(".info").text("Данные записаны");
      }
      function funcError (jqXHR, exception) { //Ошибка
          var msg = '';
          if (jqXHR.status === 0) {
              msg = 'Not connect.\n Verify Network.';
          } else if (jqXHR.status == 404) {
              msg = 'Requested page not found. [404]';
          } else if (jqXHR.status == 500) {
              msg = 'Internal Server Error [500].';
          } else if (exception === 'parsererror') {
              msg = 'Requested JSON parse failed.';
          } else if (exception === 'timeout') {
              msg = 'Time out error.';
          } else if (exception === 'abort') {
              msg = 'Ajax request aborted.';
          } else {
              msg = 'Uncaught Error.\n' + jqXHR.responseText;
          }
          $(".info").text(msg);
      }
      $('#send').click(function(){
        let send = $("#send").val();
        let lineone = $("#lineone").val();
        let linetwo = $("#linetwo").val();
        $.ajax({
          url: "index.php",
          type: "POST",
          data: {send: send, lineone: lineone, linetwo: linetwo},
          dataType: "html",
          beforeSend: funcBefore,
          success: funcSuccess,
          error: funcError
        });
      });
    });
  </script>
</html>


sql:
-- phpMyAdmin SQL Dump
-- version 4.9.0.1
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1
-- Время создания: Окт 03 2019 г., 11:03
-- Версия сервера: 10.3.15-MariaDB
-- Версия PHP: 7.3.6

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- База данных: `help`
--

-- --------------------------------------------------------

--
-- Структура таблицы `bd`
--

CREATE TABLE `bd` (
  `id` int(11) NOT NULL,
  `lineone` varchar(30) NOT NULL,
  `linetwo` varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `bd`
--

INSERT INTO `bd` (`id`, `lineone`, `linetwo`) VALUES
(1, '1', '1'),
(2, '22', '22');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `bd`
--
ALTER TABLE `bd`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `bd`
--
ALTER TABLE `bd`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


5d95bb8172a68476458861.jpeg
  • Вопрос задан
  • 1021 просмотр
Решения вопроса 2
Eridani
@Eridani
Мимо проходил
1) Собрали данные с формы
2) Отправили их аяксом до пыхи
3) Пыха пишет в БД полученные результаты
4) Запись прошла успешно? - Отдаем посредством json_encode необходимые данные
5) В теле функции success аякса берем полученный data от php и распоряжаемся этими данными, аппендя эти данные по своим блокам
Ответ написан
alex-1917
@alex-1917
Если ответ помог, отметь решением
к чему эта лишняя функция, да еще и примитивным фуункционалом???
function funcSuccess(data) {
   $(".info").text("Данные записаны");
}

И ГДЕ в обработчике выгрузка данных потребованию? У тебя по требованию простозапрос в БД, дальше что?)))
И ГДЕ подгрузка поступивших данных в требуемый блок???
Вот так пробуй:
вместо
if (isset($_POST['send'])) {
  $lineone = $_POST['lineone'];
  $linetwo = $_POST['linetwo'];
  $query = mysqli_query ($mysqli, "INSERT INTO `bd` (`lineone`, `linetwo`) VALUES ('$lineone', '$linetwo');");
}

вот это
if (isset($_POST['send'])) {
  $lineone = $_POST['lineone'];
  $linetwo = $_POST['linetwo'];
  $query = mysqli_query ($mysqli, "INSERT INTO `bd` (`lineone`, `linetwo`) VALUES ('$lineone', '$linetwo');");
$res = '';//тут обработка запроса к бд - из $query получай строку
echo $res;
}

и делай обработчик в отдельном файле, к чему столько сложностей-то?
----------------------------
вместо
success: funcSuccess,
вот это
success: function(data){
$('#result').html(data);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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