Получить класс <body>с использованием AJAX - PullRequest
0 голосов
/ 15 июня 2011

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

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

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

};

Теперь на моих страницах у меня есть классы на <body> на определенных страницах. Только те классы не возвращаются, конечно. Есть ли способ получить ВСЁ тело, используя AJAX? или, может быть, весь HTML (с содержанием <head>).

Большое спасибо за вашу помощь:)

Ответы [ 2 ]

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

Основная проблема заключается в том, что innerHTML устанавливает HTML-код внутри элемента и не заменяет его. Таким образом, вы по крайней мере получите элемент body внутри элемента body, что недопустимо.

Так что вам пришлось использовать replaceChild вместо innerHTML, но вы не можете, потому что у вас нет body-node, и, кроме того, я боюсь, что это не сработало для замены body-element вообще (по крайней мере в IE).

responseXML (если имеется) также не поможет вам в этом случае, потому что вы не можете перемещать узлы между различными документами в IE

Вывод:
Вам нужно будет проанализировать ответ, извлечь содержимое тела и класс тела.
Затем установите innerHTML и класс существующего тела.

Краткий пример (возможно, RegExp необходимо изменить в зависимости от ответа)

var parsed=this.responseText.match(/<body\s+class="([^"]*)">(.*)<\/body>/);
   document.body.className=parsed[1];
   document.body.innerHTML=parsed[2];
0 голосов
/ 15 июня 2011

Вместо этого используйте responseXML .

edit.

Ваш код неверен.Вы должны проверить, если req.readyState==4 и req.status==200, а затем позвоните req.responseTxt:

req.onreadystatechange = function() {
  if (this.readyState==4 && this.status==200) {
    document.body.innerHTML= this.responseText;
    ajax();
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...