Javascript函数正常工作8次,然后每隔一次

我有一个javascript函数,我试图添加到我的文档,让它有一个实时更新的感觉。它是对我的MVC控制器的AJAX调用,它返回一个JSON结果并将其添加到顶部的列表中,然后隐藏最后一个li,然后删除最后一个li。

问题是,该功能完美无瑕地运行8次,然后变得棘手。在前8次之后,该函数仅隐藏列表中的最后一项,每隔一次将其添加到顶部。因此,在前8次运行之后,我的列表每增加一次脚本运行速度增加1 li:

这是我的功能:

<script type="text/javascript">
    $(document).ready(function() {
        function latestBranch() {
            $.getJSON("Home/LatestWristband", null, function (html) {
                var showHideSpeed = 200;
                var firstLI = $("#recentBranches ul li").first();
                if (firstLI.text() !== html) {
                    firstLI.before('
  • ' + html + '<\li>'); $("#recentBranches ul li").first().hide().show(showHideSpeed); $("#recentBranches ul li").last().hide(showHideSpeed/4, function() { $("#recentBranches ul li").last().remove(); }); } }); }; setInterval(latestBranch, 500); }); </script>

    我已经尝试了几件事来让它发挥作用。我的第一个想法是,间隔比脚本摆脱最后一个列表项更快,但我已经测试了这个以5000的间隔为get,1000为隐藏/显示元素,这应该提供至少在下次通话之前额外增加3000毫秒。我也试过改变这个:

    $("#recentBranches ul li").last().hide(showHideSpeed/4,
                            function() {
                                $("#recentBranches ul li").last().remove();
                            });
    

    至:

    $("#recentBranches ul li").last().remove();
    

    但是8次后我得到了同样的问题。似乎在它进入这种每隔一段时间只能工作的节奏之后,它就会保持不变。我试过看aroudn,但我似乎找不到任何可以解释这些症状的东西......

  • 3
    有人建议我使用setTimeout而不是在完成后使用函数调用自身的递归选项,但会有延迟。我确实尝试过,但有同样的问题。我已经清除了浏览器缓存,并验证了浏览器中的脚本是我刚才更改的脚本。
    额外 作者 tostringtheory,

    1 答案

    您正在使用错误的斜杠来关闭

  • ,这意味着您实际上每个请求都添加了2
    • 。 (第二个是空白的)

      改变这一行:

      firstLI.before('
    • ' + html + '<\li>');

      对此:

      firstLI.before('
    • ' + html + '
    • ');
      
  • 3
    额外
    优秀!愚蠢的错误,应该抓住它。我想我之所以不这样做的原因是因为它之前只做过8次才有效。我可以理解8次正确,因为列表中最初有7个项目,所以当它删除第7个时,那就是错误的li。但是,你能解释为什么它每隔一段时间都有效吗?如果它只删除7,然后继续添加,但从不删除,我本可以抓住它。我觉得这很奇怪有趣!
    额外 作者 tostringtheory,
    啊,对不起,我没有看到每个请求的2个li!我已经将你的答案标记为正确了,然后就开始了!非常感谢。
    额外 作者 tostringtheory,