Не понимаю, почему responseText ничего не возвращает? Код (Javascript): <script> var addCart = document.querySelectorAll('.add-to-cart'); var cart = document.querySelector('.count-cart'); addCart.forEach(function(element, i){ addCart[i].addEventListener('click', function(e) { e.preventDefault(); var id = addCart[i].dataset.id; xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (this.readyState==4 && this.status==200) { console.log(this.responseText); cart.innerHTML=this.responseText; } } xmlhttp.open("POST", "/cart/addAjax/" + id, true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') xmlhttp.send(); return false; }) }) </script> HTML: <li><a href="#"><i class="fa fa-shopping-cart"></i> Корзина <span class="count-cart">(<?php echo Cart::countItems()?>)</span></a></li> PHP: <?php class Cart { public static function addProduct($id) { $id = intval($id); $productsInCart = []; if(isset($_SESSION['products'])) { $productsInCart = $_SESSION['products']; } if(array_key_exists($id, $productsInCart)) { $productsInCart[$id]++; } else { $productsInCart[$id] = 1; } $_SESSION['products'] = $productsInCart; return self::countItems(); } public static function countItems() { if(isset($_SESSION['products'])) { $count = 0; foreach($_SESSION['products'] as $id => $quantily) { $count = $count + $quantily; } return $count; } else { return 0; } } } В сессии счётчик увеличивается, думаю где-то проблема в js --- Добавлено --- HTML: <!-- это для синхронных<a href="/cart/add/<?php echo $product['id'];?>" class="btn btn-default add-to-cart"><i class="fa fa-shopping-cart"></i>В корзину</a>--> <a href="#" data-id="<?php echo $product['id'];?>" class="btn btn-default add-to-cart"> <i class="fa fa-shopping-cart"></i>В корзину </a> --- Добавлено --- А во вкладке Network, эти адишники отображаются