2010-12-15 33 views
2

我有一个每20秒钟使用setInterval的计时器,它使用jQuery的ajax函数load()来设置toparticles div与来自另一个网站的信息。一旦加载成功,它会在toparticles div中的第一篇文章上执行jQuery高亮效果。这两个地方的所有文章都在他们自己的独立表中,所以我使用#toparticles表:首先。jQuery动画只有在ajax信息不一样的情况下

我只想执行加载到toparticles div,并且动画如果第一篇文章不一样。

所以这个概念如下: 每20秒钟: 检查这个URL,如果第一个表格不等于你所在页面的第一个表格,用这个URL的信息重新加载整个div,然后执行高亮动画。

我当前的代码:

setInterval(function() { 
$("#toparticles").load("http://myarticles/feed/of/top/articles", function() 
{ 
$("#toparticles table:first").effect("highlight", {color:"#f2f37f"}, 1000);}); 
}, 20000); 

感谢,如果你能提供任何帮助。

+0

你能有某种ID为第一篇文章让你可以轻松测试它是否一样?还是你必须检查它的整个HTML? – 2010-12-15 19:48:44

回答

1

天真的方法(最好的办法是有某种ID的)是

setInterval(function() { 
    var first_html = $("#toparticles table:first").text(); 
    $("#toparticles").load("http://myarticles/feed/of/top/articles", function() 
    { 
    if (first_html == $("#toparticles table:first").text()) 
    { 
     $("#toparticles table:first").effect("highlight", {color:"#f2f37f"}, 1000); 
    } 
    }); 
}, 20000); 

它存储在一个变量中的第一个表的文本 Ajax调用之前,然后再进行比较到新的第一张桌子。 (我只检查文本,你可以改变,要.html()检查整个HTML结构,如果你想详细的那个水平)

+0

如果当前页面的第一个表格等于相同的东西,是不是您的条件检查?不是其他人?似乎是这样处理后,也许有一些变化的“这个”? – 2010-12-15 20:30:22

+0

@Dan,在将新内容添加到元素后调用回调方法。所以'first_html'变量保存了pre-ajax内容,并且新的'$(“#toparticles table:first”)。text()'返回后ajax内容。 – 2010-12-15 20:38:49

1

你也许可以改变你的要求使用jQuery.ajax()。它有一个“ifModified”选项。从文档:

ifModifiedBoolean 默认值:false

只允许自上次请求的响应已经改变了请求是成功的。这是通过检查Last-Modified头来完成的。默认值为false,忽略标题。在jQuery 1.4中,该技术还检查服务器指定的'etag'以捕获未修改的数据。

jQuery.ajax() documentation

此外,我没有检查自己,但它好像他们有一个使用​​函数的调用回一个例子:

$("#success").load("/not-here.php", function(response, status, xhr) { 
    if (status == "error") { 
    var msg = "Sorry but there was an error: "; 
    $("#error").html(msg + xhr.status + " " + xhr.statusText); 
    } 
}); 
相关问题