我有这个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>
内容)。
非常感谢您的帮助:)
答案 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==4
和req.status==200
,然后致电req.responseTxt
:
req.onreadystatechange = function() {
if (this.readyState==4 && this.status==200) {
document.body.innerHTML= this.responseText;
ajax();
}
};