Почему это не работает таким образом? - PullRequest
2 голосов
/ 20 января 2011

Я пытаюсь добиться Facebook, как навигация по страницам, используя AJAX. Я написал следующий код.

if ("onhashchange" in window) {
    window.onhashchange = function () {
        locationChanged(window.location.href);
    }
}
else {
    var storedURL = window.location.href;
    window.setInterval(function () {
        if (window.location.href != storedURL) {
            storedURL = window.location.href;
            locationChanged(storedURL);
        }
    }, 250);
}

function locationChanged(e) {
    if (window.location.href.include('#!')) {
        var paths = window.location.href.split("#!");
        if (paths.length >= 2) {
            var pos = paths.length - 1;

            if (paths[pos].startsWith("/"))
                paths[pos] = paths[pos].substr(1);

            $('#holder').load(paths[pos]);
        }
    }
    else {
        if (window.location.href.endsWith('Index.html')
        || !window.location.href.endsWith('.html')) {
            //this is first page
            redirect("Login.html");
        }
    }
}

$(document).ready(function() {
    if (window.location.href.endsWith('Index.html')
    || !window.location.href.endsWith('.html')) {
        //this is first page
        redirect("Login.html");
    }

    captureLinks();
});

function captureLinks() {
    $('a').click(function(e) {
        e.preventDefault();
        redirect($(this).attr("href"));
    });
}

function redirect(page) {
    var path = page;

    if (window.location.href.include('#!')) {
        var paths = window.location.href.split("#!");

        var pos = paths.length - 2;

        if (!paths[pos].endsWith("/"))
            paths[pos] += "/";

        if (!page.startsWith("/"))
            page = "/" + page;

        path = paths[pos] + "#!" + page;
    }
    else {
        if (path.endsWith(".html"))
            path = window.location.href.trimEndTill("/");
        else
            path = window.location.href;

        if (!path.endsWith("/"))
            path += "/";

        if (!page.startsWith("/"))
            page = "/" + page;

        path += "#!" + page;
    }

    window.location.href = path;    
}

Хорошим моментом является то, что код работает, но у него есть единственная проблема. Существует страница Index.html, которая является главной страницей ввода приложения, и когда я пишу, произнесите ...

http://localhost:8081/

Преобразует его в ...

http://localhost:8081/#!/Login.html

Что идеально. Но когда я указываю, чтобы сказать ...

http://localhost:8081/Index.html

Он делал это ...

http://localhost:8081/Index.html/#!/Login.html

Это создает ошибку 404, так как нет страницы с именем "Index.html /". Я изменил код, чтобы он мог обнаружить Index.html и сначала удалить его, прежде чем указывать на Login.html. Хотя теперь код дает правильный результат, даже если Index.html как ...

http://localhost:8081/#!/Login.html

Но проблема в том, что она никогда не загружает эту страницу (Login.html) в тело, используя функцию $ .load. Что-то не так? Я также хотел бы знать, достаточно ли эффективен мой код?

1 Ответ

1 голос
/ 21 января 2011

Что вам действительно нужно, так это плагин jQuery Address .( Образцы )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...