@Web-Building

Почему ответ от сервера отображается только после перезагрузки страницы?

Подскажите пожалуйста, почему ответ от сервера (из консоли Google Chrome, вкладка Response), не отображается сразу на странице, а только после её обновление или перезагрузки?
Например: настоящий счётчик кнопки DisLike есть 299 (голосов), а после клика на кнопку - остаётся так же 299. А в консоли браузера, ответ сервера показывает страницу на которой уже 300 голосов! И только когда я её обновлю или перезагружу, тогда и на смой странице показывается инкремент, т.е. уже 300. Почему так? Может, кто-то подскажет и как это исправить, чтобы после клика, на странице сразу срабатывал инкремент (+1 к предыдущему) голосов?!

index.php
require_once('/dislike.php');   // обработчик кнопоки DisLike
  
  $ds = "mysql: соединение с БД";
  $pd = new PDO($ds, 'xxxxxxxxx', 'xxxxxxxx');
  $statemen = $pd->query("SELECT `value` FROM DisLike WHERE `iddislike` = 1");
  $dislike = (int)$statemen->fetchColumn();   // для DisLike


<div class="block-down">   <!-- кнопка DisLike --> 
    <form id="ratingsDislike" method="post">  
        <button id="btnDislike" type="button"><i id="thumbs-down" class="far fa-thumbs-down"></i></button>
    </form> 
    
    <div class="content-dislike-like">
        <span class="holding">I'm not holding a grudge...</span>&#160;
        <p id="dislike_count"><?php echo $dislike ?></p>      
    </div>
</div>


main.js

$("#btnDislike").on('click', function(e) {
		e.preventDefault();
		
        var ajax = $.ajax({
			method: 'post',
			url: "https://site.com/dislike.php",
			dataType: 'text',
			data: {
				'countDislike': 1
			}
		});
		    ajax.done(function() {
		        counter++;
		        $("#dislike-count").text(Number($("#dislike-count").text()) + 1);
		    });
	});


dislike.php

declare(strict_types = 1);
error_reporting(E_ALL);

                        
  // конфигурация БД
$xxxxx = 'xxxxxx';  // имя сервера
$xxxxx = 'xxxxxx'; // название БД
$xxxxx = 'xxxxxx'; // имя пользователя БД  (Логин)
$xxxxx = 'xxxxxx';  // пароль
$ds = "mysql:соединение с БД";

try {
    $pd = new PDO($ds, 'xxxxxxxx', 'xxxxxxx');
        // Для таблице  DisLike
    if (isset($_POST['countDislike']) && (int)$_POST['countDislike'] === 1) {   
        
        $stm = $pd->query("SELECT `value` FROM DisLike WHERE `iddislike` = 1"); // Для DisLike
        $dislike = (int)$stm->fetchColumn();
        $dislike++;
        $paramsDisLike = [':iddislike' => 1, ':value' => $dislike];
        $quer = "UPDATE `DisLike` SET `value` = :value WHERE `iddislike` = :iddislike";  
         
        $stm = $pd->prepare($quer);
        $stm->execute($paramsDisLike);
        echo json_encode($dislike);
    }
}

catch(Exception $ed) {
    echo $ed->getMessage();
}


И второй вопрос, может кто подскажет ... Как мне сделать так, чтоб нажатие на кнопку было единственным от каждого нового пользователя. Ведь применяю БД для подсчёта голосов, но регистрацию на сайте, я не применяю. Соответственно, аутентификация на сайте по логину и паролю отсутствует.
Знаю, что 'nj нужно как-то написать в dislike.php. Идентификация должна быть, наверное, по ID-компа. Но как это написать?? Рассчитываю на Вашу помощь.
  • Вопрос задан
  • 260 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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