使用AJAX获得<body>的类

问题描述

| 我有这个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();

};
现在在我的页面上,某些页面上的ѭ1上有课程。当然,只有那些类不会返回。 有没有一种方法可以使用AJAX获得整个主体?或整个html(带有
<head>
内容)。 非常感谢你的帮助 :)     

解决方法

        主要的问题是,innerHTML将HTML设置在一个元素内,而不是替换它。 因此,您至少会在人体元素内得到一个人体元素,这是非法的。 因此,您必须使用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];
    ,        请改用responseXML。 编辑。 您的代码不正确。您应检查
req.readyState==4
req.status==200
,然后致电
req.responseTxt
req.onreadystatechange = function() {
  if (this.readyState==4 && this.status==200) {
    document.body.innerHTML= this.responseText;
    ajax();
  }
};