问题描述
|
我有这个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();
}
};