2 Таблицы из БД обновляются и выводят результат на страницу сайта только после обновления! Почему?? Кнопки Like / DisLike
Доброго времени суток всем! Вопрос в заголовке. Да к тому же и страницу сайта нужно обновить, чтобы появился последний результат (каждый клик по кнопке, это +1 к предыдущему результату). Помогите, кто может?! :)
Привожу пример для одной кнопки, допустим: Like.
index.php
// Счётчик кликов с сохранением в БД
require_once('counter.php'); // обработчик кнопок Like / DisLike
$dsn = "mysql:host=localhost;port=3306;dbname=название БД;charset=utf8";
$pdo = new PDO($dsn, 'имя пользователя БД', 'password', $опционально);
$statement = $pdo->query("SELECT `value` FROM counterLike WHERE `idLike` = 1");
$like = (int)$statement->fetchColumn();
Дальше форма HTML ................. не существенно, т.к. не в ней проблема.
main.js
<script>
// Клик по кнопке Like
$(document).ready(function() {
var linklike = $("#btnLike"),
counterlike = $("#like_count"),
countlike = 0;
// Блок - Лайк ( Like )
linklike.on('click', function(e) {
e.preventDefault();
var ajax = $.ajax({
method: 'post',
url: 'https://site.php/counter.php',
dataType: 'text',
data: {
'countlike': 1
}
});
ajax.done(function(data) {
data = JSON.parse(data);
counterlike.html(parseInt(data));
});
});
});
</script>
counter.php
<?php
declare(strict_types=1);
error_reporting(E_ALL);
// конфигурация БД
$servername = 'localhost';
$dbname = 'название БД';
$database = 'имя пользователя БД';
$password = 'password';
$dsn = "mysql:host=localhost;port=3306;dbname=название БД;charset=utf8";
try {
$pdo = new PDO($dsn, 'имя пользователя БД', 'password', $опционально);
// Для таблице counterLike
if (isset($_POST['countlike']) && (int)$_POST['countlike'] === 1) {
$stmt = $pdo->query("SELECT `value` FROM counterLike WHERE `idLike` = 1"); // Для Like
$like = (int)$stmt->fetchColumn();
$like++;
$paramsLike = [
':id' => 1,
':value' => $like
];
$query = "UPDATE `counterLike` SET `value` = :value WHERE `idLike` = :id";
$stmt = $pdo->prepare($query);
$stmt->execute($paramsLike);
echo json_encode($like);
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
И вот последний результат SQL-таблицы "counterLike" в БД:

Прошу Вашей помощи!
Ответы (1 шт):
У вас к моменту завершения выполнения ajax ещё не подцепился обработчик результата заброса или атрибут done в ajax не существует (я по документации не нашёл), его нужно заменить на success следующим образом:
var ajax = $.ajax({
method: 'post',
url: 'https://site.php/counter.php',
dataType: 'text',
data: {
'countlike': 1
},
success: function (data) {
counterlike.html(data);
},
});
Замените echo json_encode($like); в php скрипте на echo $like;