Задать вопрос
aaadddminnn
@aaadddminnn
php it ubuntu debian

Почему перегружает страницу через раз?

Привет. Вот пишу я велосипедик для 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 Проблемы начинаються после регистрации
  • Вопрос задан
  • 205 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Особо не вникал, но что бросилось сразу в глаза - Вы везде сначала отсылаете запрос, потом вешаете обработчик, что не есть хорошо.
xmlhttp.onreadystatechange=function(){}
        xmlhttp.send("id="+id+"&hash="+hash);


И желательно привести все ответы к JSON- у Вас где JSON где просто число в ответе, тоже не есть хорошо.
Хотя бы к
{"success":"true","data":{}}//ok
{"success:"false","error":{"code":1,"message":"bla"}//error
//success- избыточен, но есть на него идейные любители


Ну и если на то пошло - не "подщёта" а подсчёта=)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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