@Web-Building

Нажатие по кнопке Like не отображает сразу увеличение счётчика на +1, а только лишь, после перезагрузки страницы. Почему?

В БД при этом, тоже "инкремент".
А в консоли ChromeDevTools появляется ошибка:
"Uncaught SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse ()"

Доброго времени суток!
В чём может быть проблема? Помогите, пожалуйста, разобраться.
Заранее, благодарю за любую помощь!

index.php
$mysql = new PDO( создает соединение с базой данных );  
$statement = $mysql->query("SELECT `value` FROM counter WHERE `id` = 1");
$data3 = (int)$statement->fetchColumn();

<div class="block-up">   
    <form id="ratingsLike" method="post">  
        <input type="hidden" name="ip" value="" />
        <button id="btnLike" type="button"></button>
    </form> 
     
    <div class="content-like-dislike">
        <span class="thanks">Thank you very much!</span>
        <p id="like_count"><?= $data3 ?></p>    <!--  Счётчик подсчёта голосов Like  -->
    </div>
</div>


main.js
var btnLike = $("#btnLike"),
		counterLike = $("#like_count");
		
	btnLike.on('click', function(event) {
	    event.preventDefault();
	    
	    var ajax = $.ajax({
		    method: 'post',
			url: 'site.php/counter.php',
			dataType: 'text',
			data: {
				"count": 1
			}
		});
		ajax.done(function(data) {
			data = JSON.parse(data);
			counterLike.html(parseInt(data));
		});
		
	});


counter.php
if (isset($_POST["count"]) && (int)$_POST["count"] === 1):
 try {
   $mysql = new PDO( создает соединение с базой данных );   
   
   $stmt = $mysql->query("SELECT `value` FROM counter WHERE `id` = 1");
   $data = (int)$stmt->fetchColumn();
   $data++;
   $query = "UPDATE `counter` SET `value` = :value WHERE `id` = :id";
   $params = [
     ":id" => 1,
     ":value" => $data
   ];
   $stmt = $mysql->prepare($query);
   $stmt->execute($params);
      echo json_encode($data);
     
 } catch (Exception $e) {
  echo $e->getMessage();
 }
endif;
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1)
$stmt = $mysql->query("SELECT `value` FROM counter WHERE `id` = 1");
   $data = (int)$stmt->fetchColumn();
   $data++;
   $query = "UPDATE `counter` SET `value` = :value WHERE `id` = :id";
   $params = [
     ":id" => 1,
     ":value" => $data
   ];
меняем на
$query = "UPDATE `counter` SET `value` = `value`+1 WHERE `id` = :id";
и сразу избавляемся от лишнего запроса. На будущее переписываем как инсерт он дупликэйт апдейт.
2) dataType: 'text',меняем на dataType: 'json', и никакие парсе не нужно, получаем сразу объект.
3) Смотрим вкладку нетворк, строчку где выполнился аякс, смотрим ОТВЕТ СЕРВЕРА. Много думаем.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 23:40
10000 руб./за проект
24 апр. 2024, в 23:13
130000 руб./за проект