通过Jquery启动/停止Ajax调用

时间:2011-02-22 00:57:43

标签: jquery ajax setinterval

我有一个包含2个标签的网页。这些选项卡在单击时显示/隐藏div。两个选项卡都使用jquery对php脚本进行ajax调用,以显示来自不同数据库的结果。因此,选项卡1显示食物列表,第二个选项卡显示价格列表。它设置为每30秒自动刷新一次。我的问题是,当我在2个选项卡之间点击时,我更喜欢没有点击的选项卡停止ajax调用,因此只有一个ajax调用正在运行,基本上用于优化目的。我该怎么做呢?我是否会使用setInterval让它每隔30秒运行第一个选项卡ajax调用,然后当单击另一个选项卡时,调用一个函数在第一个setinterval运行的id上运行clearInterval?如果单击第一个选项卡,则反之亦然,它会清除第二个选项卡ajax调用的间隔?

2 个答案:

答案 0 :(得分:0)

基本上没有理由你正在做什么。

我更希望,如果你有一些东西需要加载,需要在一段时间后加载,你应该调用两个标签,但只要问,如果有什么变化。所以我们说,如果发生了变化,你会每隔10秒调用一次服务器,返回false或者true就不是那么大了,如果返回yes,只需同步两个项目。

如果不需要同步这两个项目,为什么在单击选项卡时只是不同步它们?

对于用户体验,最好经常要求更改,但仅在需要时同步内容。

如果你这样做,不要使用setInterval但是setTimeout并且在你的函数中再次调用setTimeout,setInterval不是那么好; - )

答案 1 :(得分:0)

反复拉动而不是在新事物上拉动是一个不错的讨论,但我现在暂时离开它。

jQuery UI标签具有绑定标签更改行为的方法。我会把它连接起来,这样当一个标签变得可见时,它会被服务器内容填充,并且开始间隔重复该行为。我将存储jQuery的AJAX函数的返回(XHR本身在较旧的jQ上,jQ XHR包装器在1.5中)和返回的计时器ID,这是从启动间隔开始的。

然后,每当加载一个新选项卡时,我会在XHR /包装器上调用abort()并在计时器ID上调用clearInterval,然后对新操作系统中的前一个选项卡执行相同的操作 - 通过AJAX填充(存储XHR)并开始间隔(存储ID)。