Показать сообщение отдельно
  #1 (permalink)  
Старый 04.01.2014, 15:41
Аватар для Vikky
Интересующийся
Отправить личное сообщение для Vikky Посмотреть профиль Найти все сообщения от Vikky
 
Регистрация: 31.12.2013
Сообщений: 14

Асинхронный вывод данных из базы MySQL
Приветствую!

Уже пару дней бьюсь с этим вопросом, поэтому буду рад любой помощи (и да.. Гугл уже спрашивал).

Делаю простой счётчик кликов по ссылкам, который сохраняет данные в БД и выводит их при перезагрузке страницы (для каждой страницы - свой результат). С сохранением - проблем никаких нет, всё асинхронно. Но когда я пытаюсь так же асинхронно вывести значение - вместо цифр пустота. Причём без ошибок в консоли

JS код вывода следующий:

function getXmlHttp() {
	var xmlHttp;
	try {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlHttp = false;
		}
	}
	if (!xmlHttp && typeof XMLHttpRequest !== 'undefined') {
		xmlHttp = new XMLHttpRequest();
	}
	return xmlHttp;
}

var xmlHttp = getXmlHttp();
var params = "count=" + document.location.href; // берём URL документа для определения кол-ва кликов на данной странице
xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", "counter.php", true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(params);
xmlHttp.onreadystatechange = function() {
	if (this.readyState !== 4) return;
	if (this.status !== 200) return;
}
return xmlHttp.responseText;


PHP код вывода следующий:

$showQuery = $db->query("SELECT `counter` FROM `table` WHERE `url`='{$_POST['count']}' LIMIT 1");

if (!empty($_POST['count'])) 
{

	if ($showQuery->num_rows === 0) 
	{
		echo '0';
	} 
	else 
	{
		$counter = $showQuery->fetch_array();		
		echo $counter['counter'];
	}

}


Подскажите, пожалуйста, почему не работает при таком раскладе? При этом, если поменять значение:
xmlHttp.open("POST", "counter.php", false);

то всё выводится нормально, но боюсь при увеличении БД будет наблюдаться "подвисание" страницы, как написано тут..
Ответить с цитированием