Привет. Вот пишу я велосипедик для history api.
Вроде норм было нно после авторизации (там добавляется проверка входа и парсинг информации через раз перегружает страницу)
Код page.js
document.addEventListener('DOMContentLoaded', function () {
var FullList = document.getElementById('wrap');
FullList.addEventListener('click', function (e) {
if (e.target.nodeName === 'A') {
e.preventDefault();
getContent(e.target, true);
}
});
});
getContent(location.href, true);
window.onpopstate = function (event) {
getContent(location.href, true);
};
function getContent(urls, addEntry) {
load();
var url = new URL(urls);
var page = (url.pathname + url.search + url.hash);
if (page === '/') {
if (getCookie('id') && getCookie('hash')) {
var id = getCookie('id');
var hash = getCookie('hash');
var sig = 'http://api.genarais.tk/method/Users.getToAuth.php';
var xmlhttp = getXmlHttp();
xmlhttp.open('POST', 'http://api.genarais.tk/method/Users.getToAuth.php', true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send("id=" + id + "&hash=" + hash + "&sig=" + sig);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.responseText === '#ok') {
agax('/page/game/index.html', 'pp=77', 'wrap');
game_info_reset(id, hash);
} else if (xmlhttp.responseText === '4') {
delCookie('id');
delCookie('hash');
agax('/page/index.html', 'pp=77', 'wrap');
} else if (xmlhttp.responseText === '100') {
alert('Один из параметров передан не верно. Очистите куки и войдите в игру заново');
} else if (xmlhttp.responseText === '7') {
alert('Произошла внутреняя ошибка сервера авторизация невозможна. Попробуйте обновить страницу через пару минут');
}
}
};
} else {
agax('/page/index.html', 'pp=77', 'wrap');
}
} else {
if (getCookie('id') && getCookie('hash')) {
var id = getCookie('id');
var hash = getCookie('hash');
var sig = 'http://api.genarais.tk/method/Users.getToAuth.php?id=';
var xmlhttp = getXmlHttp();
xmlhttp.open('POST', 'http://api.genarais.tk/method/Users.getToAuth.php', true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send("id=" + id + "&hash=" + hash + "&sig=" + sig);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.responseText === '#ok') {
agax('/page/' + page + '.html', 'pp=77', 'wrap');
game_info_reset(id, hash);
} else if (xmlhttp.responseText === '4') {
delCookie('id');
delCookie('hash');
agax('/page/index.html', 'pp=77', 'wrap');
} else if (xmlhttp.responseText === '100') {
alert('Один из параметров передан не верно. Очистите куки и войдите в игру заново');
} else if (xmlhttp.responseText === '7') {
alert('Произошла внутреняя ошибка сервера авторизация невозможна. Попробуйте обновить страницу через пару минут');
}
}
};
} else {
agax('/page/index.html', 'pp=77', 'wrap');
}
}
if (addEntry === true) {
history.pushState(null, null, url);
}
return false;
}
Код функций ajax и game_info_reset
function agax(url,data,result) {
load();
var xmlhttp = getXmlHttp();
xmlhttp.open('POST',url, true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send(data);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4) {
if (xmlhttp.responseText) {
document.getElementById(result).innerHTML = xmlhttp.responseText;
}
}
};
}
function getReadableFileSizeString(fileSizeInBytes) {
var i = -1;
var byteUnits = [' К', ' M', ' Bn', ' Tr', 'PB', 'EB', 'ZB', 'YB'];
do {
fileSizeInBytes = fileSizeInBytes / 1000;
i++;
} while (fileSizeInBytes > 1000);
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
};
function game_info_reset(id,hash) {
var xmlhttp = getXmlHttp();
xmlhttp.open('POST', 'http://api.genarais.tk/method/User.getGameInfo.php', true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send("id="+id+"&hash="+hash);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4) {
if (xmlhttp.responseText) {
var info = JSON.parse(xmlhttp.responseText);
money.innerHTML = '<a href="/bank/storage"><span></span><b>' +getReadableFileSizeString(info.block_money)+ '</b></a>';
gold.innerHTML = '<a href="/bank/gold"><span></span><b>' + info.block_gold + '</b></a>';
level.innerHTML = '<a href="/profile/skills"><span></span><b class="yellow">' + info.block_levels + '</b></a>';
mail.innerHTML = '<a href="/mail/index"><span></span><b class="yellow">' + info.block_mail + '</b></a>';
healt.innerHTML = '<a href="/hospital/index"><span></span><b id="healthValue" class="">' + info.healt_min + '</b><b>/' + info.healt_max + '</b></a>';
energy.innerHTML = '<a href="/missions/index"><span></span><b id="energyValue" class="">' + info.block_energy_min + '</b><b>/' + info.block_energy_max + '</b></a>';
bp.innerHTML = '<a href="/battles/invasion"><span></span><b id="ammoValue" class="">' + info.block_power_min + '</b><b>/' + info.block_power_max + '</b></a>';
} else {
alert('Демон подщёта ресурсов упал. Сообщите администрации');
}
}
};
return false;
}
В попытке боротся с проблемой каждой ссылке на онклик повешал return false; всеравно не помогло. Зарание спасибо. Вообще странно почему перегружает страницу через раз хоть и жму одни и теже ссылки. Если кому мало того что скинул то залил себе на комп и открыл доступ. genarais.tk Проблемы начинаються после регистрации