获取使用AJAX的类

时间:2011-06-15 09:58:11

标签: javascript ajax

我有这个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 个答案:

答案 0 :(得分:1)

主要问题是innerHTML在一个元素中设置HTML,而不是替换它。 所以你至少会在body-element中得到一个body元素,这是非法的。

所以你必须使用replaceChild而不是innerHTML,但是你不能,因为你没有身体节点,而且我担心它根本不能替换一个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];

答案 1 :(得分:0)

改为使用responseXML

修改。

您的代码不正确。您应该检查req.readyState==4req.status==200,然后致电req.responseTxt

req.onreadystatechange = function() {
  if (this.readyState==4 && this.status==200) {
    document.body.innerHTML= this.responseText;
    ajax();
  }
};