我在这里使用cody sherman的javascript代码:http://codysherman.com/tools/infinite-scrolling/code
我还使用一个简单的jquery脚本来动态更改包含tumblr帖子的div的背景图像.
jquery代码工作正常但我需要一种方法来在无限滚动脚本用新帖子更新时再次调用该函数.我猜他们互相交谈的方式.
你可以在这里看到这个页面:http://hypergeography.tumblr.com/
(它还没有使用无限滚动.但它确实有改变背景图像的脚本.)
任何帮助,将不胜感激.
最佳答案
如果你觉得足够安全,你肯定可以进入该代码(它不长)并在onreadystatechange部分添加一些逻辑.一旦Ajax调用完成,就会触发此事件.如果你勾选它,你可以轻松地添加一些东西来与你的代码交谈.
另一种方法是劫持XMLHttpRequest,这样一旦调用了send()方法,就可以附加自己的事件监听器来监视“load”事件的请求.请求完成后,您可以调用自定义函数.这可以这样做:
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或参数或任何特定信息将帮助您确定调用的位置,然后相应地修改请求.
另外:确保在任何其他javascript之前,这些劫持被称为FIRST.