Ajax загружается только один раз - PullRequest
3 голосов
/ 15 июня 2011

У меня есть этот код:

window.onload= function() {
    window.scrollTo(0, 0.9);
    if (navigator.standalone) return;
    for (var i= document.links.length; i-->0;) {
        document.links[i].onclick= function() {
            var req= new XMLHttpRequest();
            req.onreadystatechange= function() {
                if (this.readyState!==4) return;
                document.body.innerHTML= this.responseText;
            };
            req.open('GET', this.href, true);
            req.send();
            return false;
        };
    }
};

Он в основном получает href a, на который нажимают, и загружает href в текущее тело. Теперь проблема в том, что это работает только один раз. Как только содержимое меняется, как только я нажимаю другую ссылку (на новой странице), оно перенаправляется и URL-адрес изменяется. Затем Ajax работает снова, так как я «действительно» изменил страницы и сбросил все это.

Я как бы потерялся здесь. Как я могу сбросить мою функцию, чтобы работать навсегда? Спасибо,

Christopher

EDIT: Итак, я попробовал что-то вроде этого:

function ajax(){
    if (navigator.standalone) return;
    for (var i= document.links.length; i-->0;) {
        document.links[i].onclick= function() {
            var req= new XMLHttpRequest();
            req.onreadystatechange= function() {
                if (this.readyState!==4) return;
                document.body.innerHTML= this.responseText;
            };
            req.open('GET', this.href, true);
            req.send();
            ajax();
            return false;
        };}
    }



window.onload= function() {
    window.scrollTo(0, 0.9);
    ajax();

};

Но безрезультатно ... вызова функции ajax (), когда она завершается, явно недостаточно. Может кто-нибудь помочь мне немного больше: с. Это не моя область знаний:).

Ответы [ 5 ]

2 голосов
/ 15 июня 2011

Вам придется заново установить обработчик «click» после удаления оригинального содержимого <body> ответом.Поскольку все в старом DOM исчезает после получения ответа, привязка обработчика также исчезла.

1 голос
/ 15 июня 2011

Когда вы устанавливаете document.body.innerHTML, вы заменяете весь документ, что означает, что события onclick, которые вы подключили, исчезли.Вы должны привязать события клика к новым ссылкам.

1 голос
/ 15 июня 2011

Вы заменяете весь документ, включая ссылки, к которым привязан обработчик AJAX.

window.onload срабатывает только при загрузке документа, а не после завершения вызова ajax.

Поместите ваш обработчик загрузки в новую функцию, затем вызовите ее вручную, ваш обработчик изменения состояния готовности.

1 голос
/ 15 июня 2011

Это кешируется?Добавьте "? Random =" + Math.random к href.

0 голосов
/ 15 июня 2011

Вы удаляете ссылки, когда заменяете тело данными.

Это также тот код, который предлагает использовать такую ​​библиотеку, как jQuery.В этом случае почти весь ваш код сводится к этому, а также решает кросс-браузерные проблемы:

$('a').live('click', function() {
    $.get( this.ref , function(data) {
        $('body').html(data);
    });
    return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...