Показать сообщение отдельно
  #1 (permalink)  
Старый 13.08.2014, 11:14
Новичок на форуме
Отправить личное сообщение для Radik55rus Посмотреть профиль Найти все сообщения от Radik55rus
 
Регистрация: 13.08.2014
Сообщений: 7

AJAX навигация без якоря(Требуется помощ)
Ребят у меня есть проблемка, на хабре наткнулся на AJAX навигацию без якоря и меня она заинтересовала. но вот есть проблема. Я иследовал статью и приведенный к ней пример использования(Что-то вроде демо). К моему горю причину проблемы не решил. Проблема такова: В примере(демо) мы свободно можем перемещаться меж страницами и открывать нужную нам страницу с помощью URL. Но я, по какой-то причине, не могу этого делать, то есть, я не могу попасть на нужную мне страницу через URL, только шагая через index страницу.
у меня все сделано как сказано. Только вод меня пугает, то, что ссылка на файл выгладят примерно так(точнее такую ссылку требует изначальный код, пробовал коректировать, не помогло)К примеру: у нас есть файл home.php соответственно мы убираем расширение, и пишем, home в href, ах да, еще нужно заменить href на data-href. если мы просто ищем файл home, в родительской папке страницы, то мы ищем в /page(это можно убрать конечно)/home/home.php(а вот это меня пугает)

Мне показалось, что статейка интересная, по этому я ее выложу сюда.

Ajax навигация без якоря(#)

Сегодня я расскажу как сделать ajax навигацию без якоря (#). Меньше слов, сразу к делу!

Так как ссылок по которым мы будем обращаться к серверу на самом деле не существует, то сервер будет постоянно возвращать Error 404.
Добавим в .htaccess пару строк:

Код:
ErrorDocument 403 <script>script=document.createElement('script');script.setAttribute('src','script.js');script.setAttribute('type','text/javascript');document.head.appendChild(script);</script>
ErrorDocument 404 <script>script=document.createElement('script');script.setAttribute('src','script.js');script.setAttribute('type','text/javascript');document.head.appendChild(script);</script>
Внимание: после ErrorDocument 403/404 нельзя ставить пробелов, ибо падает сервер.

Вот код между в читаемом виде:

Код:
script = document.createElement('script');
script.setAttribute('src', 'script.js');
script.setAttribute('type', 'text/javascript');
document.head.appendChild(script);
Так как после ErrorDocument идёт не ссылка а обычный текст, то нас не отредиректит. Текст выведется в браузер и подключит нужный нам скрипт.
Содержимое script.js:
function ajax(url, func)
{
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('post', url, true);
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState == 4)
        {
            switch (xmlhttp.status) // тут обработаются ошибки при ajax запросах
            {
                case 200:
                    func(xmlhttp.responseText);	
                break
                case 401:
                    alert('401');
                break
                case 403: //Как мне кажется пользователю не особо важна разница между 403 и 404 ошибкой, поэтому их я обрабатываю вместе
                case 404:
                    alert('404');
                break
                case 500:
                    alert('500');
                break
            }
        }
    }
    xmlhttp.send();
}

function load(path) // обрабатываем path в рабочую ссылку и делаем запрос на сервер
{
    var FullPath = '/page' +  path + '/' + path.split('/')[path.split('/').length - 1] + '.html';
    ajax(FullPath, function(answer)
    {
        document.getElementById('content').innerHTML = answer;
    });
}

ajax('template.html', function(answer) // тут подгружается шаблон сайта
{
    document.body.innerHTML = answer;
});
if (location.pathname != '/') load(location.pathname); // этот код сработает, если url не ведёт на главную страницу

window.onpopstate = function() // для навигации по истории
{
    load(location.pathname);
}

window.onclick = function(e) // обработчик ссылок
{
    e.preventDefault();
    var obj = e.target;
    if (obj.getAttribute('data-href'))
    {
        var path = obj.getAttribute('data-href');
        load(path);
        history.pushState(null, null, path);
    }
}


Вот пример
Ответить с цитированием