Javascript ajax只加载一次

Javascript ajax只加载一次,javascript,ajax,loops,Javascript,Ajax,Loops,我有以下代码: window.onload= function() { window.scrollTo(0, 0.9); if (navigator.standalone) return; for (var i= document.links.length; i-->0;) { document.links[i].onclick= function() { var req= new XMLHttpRequest();

我有以下代码:

window.onload= function() {
    window.scrollTo(0, 0.9);
    if (navigator.standalone) return;
    for (var i= document.links.length; i-->0;) {
        document.links[i].onclick= function() {
            var req= new XMLHttpRequest();
            req.onreadystatechange= function() {
                if (this.readyState!==4) return;
                document.body.innerHTML= this.responseText;
            };
            req.open('GET', this.href, true);
            req.send();
            return false;
        };
    }
};
它基本上获取被单击的a的href,并将该href加载到当前正文中。现在的问题是它只工作一次。一旦内容被更改,只要我单击另一个链接(在新页面上),它就会重定向,url也会更改。然后ajax再次工作,因为我“真的”更改了页面并重置了整个内容

我有点迷路了。我如何重置我的功能以使其永远工作? 谢谢

克里斯托弗

编辑: 好的,我试过这样的方法:

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



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

};

但是没有用。。。显然,在ajax()函数完成时调用它是不够的。谁能再帮我一点忙吗。这不是我的专业领域:)。

是否正在缓存它?将“?random=“+Math.random”添加到href。

在用响应爆破原始
内容后,您必须重新建立“单击”处理程序。由于响应返回后旧DOM中的所有内容都消失了,因此处理程序绑定也消失了。

您正在替换整个文档,包括将AJAX处理程序绑定到的链接

window.onload仅在加载文档时触发,而不是在ajax调用完成时触发


将onload处理程序放入新函数中,然后手动将其调用到就绪状态更改处理程序中。

设置document.body.innerHTML时,将替换整个文档,这意味着连接的onclick事件将消失。您必须将单击事件重新绑定到新链接。

用数据替换正文时,您正在删除链接

这也是建议使用jQuery这样的库的代码。在这种情况下,您的几乎所有代码都简化为此,并同时处理跨浏览器问题:

$('a').live('click', function() {
    $.get( this.ref , function(data) {
        $('body').html(data);
    });
    return false;
});

为什么会被否决?这解决了这个问题(使用live),此外还提出了一个建议,使代码更易于使用。它没有回答这个问题,而是使用了一个巨大的js库。这个错误可能还有两行就要解决了,所以我认为添加jquery来解决这个问题是错误的。它确实回答了这个问题。问题是“如何修复我的脚本”不是,是否有其他选择。它可能不完整,但第一行告诉您该怎么做。不管怎样,我现在知道你的推理和理性的人可以不同意!我试过了,但没用,你能看看我的编辑,告诉我怎么了吗在更新主体“innerHTML”之后,在“readystatechange”处理程序中添加对“ajax()”的调用,看看这是否有帮助。哦,在发送请求之后,对“ajax()”的另一个调用也可以去掉。