5

我在这里使用 cody sherman 的 javascript 代码:http: //codysherman.com/tools/infinite-scrolling/code

我还使用一个简单的 jquery 脚本来动态更改保存 tumblr 帖子的 div 的背景图像。

jquery 代码工作正常,但是当无限滚动脚本更新为新帖子时,我需要一种方法来再次调用该函数。我猜是他们互相交谈的一种方式。

你可以在这里看到页面:http: //hypergeography.tumblr.com/ (它还没有使用无限滚动。但它确实有改变背景图像的脚本。)

任何帮助,将不胜感激。

4

1 回答 1

4

如果您觉得足够安全,您肯定可以进入该代码(一点也不长)并在 onreadystatechange 部分添加一些逻辑。一旦 Ajax 调用完成,就会触发此事件。如果你喜欢它,你可以很容易地添加一些东西来和你的代码对话。

另一种方法是劫持XMLHttpRequest,这样一旦send()调用了它的方法,您就可以附加自己的事件侦听器来监视“加载”事件的请求。请求完成后,您可以调用自定义函数。这可以这样做:

XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
    this.addEventListener('load',function(){
        //CALL YOUR CODE HERE
    },false);
    this.originalSend(s);
}

或者,您可以劫持 onreadystatechange 函数来添加一些您自己的逻辑:

XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
    if(this.onreadystatechange){
        var oldORSC=this.onreadystatechange;    
    }
    this.onreadystatechange=function(){
        if (this.readyState==4 && this.status==200){ //a successful request
                //CALL YOUR CODE HERE
        }
        if(oldORSC){
            oldORSC();
        }
    }
    this.originalSend(s);
}

当然,如果你想支持 IE,你将不得不对他们用于 AJAX 的 ActiveXObject 做类似的事情。但我不使用它,所以我不能给你任何例子。

编辑:这假设您的页面仅为此目的进行调用。如果您有其他 AJAX 调用,则需要添加逻辑来确定正在使用哪个调用。为此,您可以挂钩该open()方法并检查 URL 或参数或任何特定信息将帮助您确定调用的去向,然后相应地修改请求。

另外:确保这些劫持被称为 FIRST,在任何其他 javascript 之前。

于 2011-05-01T03:58:06.677 回答