@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;
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 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) Смотрим вкладку нетворк, строчку где выполнился аякс, смотрим ОТВЕТ СЕРВЕРА. Много думаем.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы