【问题标题】:Javascript function works correctly 8 times, then every other timeJavascript函数正常工作8次,然后每隔一次
【发布时间】:2011-12-27 11:19:41
【问题描述】:

我有一个 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('<li>' + 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 次后我遇到了同样的问题。似乎在它进入了这种每隔一段时间才工作的节奏之后,它就一直保持着它的不确定性。我试过四处寻找,但我似乎找不到任何可以解释这些症状的东西......

【问题讨论】:

  • 有人建议我使用 setTimeout 来代替函数在完成后调用自身的递归选项,但有延迟。我确实尝试过,但有同样的问题。我已经清除了浏览器缓存,并验证浏览器中的脚本是我刚刚更改的那个。

标签: javascript json model-view-controller get html-lists


【解决方案1】:

您使用了错误的斜杠来关闭&lt;li&gt;,这意味着您实际上是在为每个请求添加 2 个&lt;li&gt;s。 (第二个是空白的)

改变这一行:

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

到这里:

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

【讨论】:

  • 太棒了!愚蠢的错误,应该抓住它。我想我没有这样做的原因是因为它只工作了 8 次。我可以理解 8 次正确,因为列表中最初有 7 项,所以当它删除第 7 项时,它是不正确的 li 的。但是,你能解释一下为什么它每隔一段时间就会起作用吗?如果它只删除了 7,然后继续添加,但从不删除,我本可以抓住它。我觉得这真的很奇怪很有趣!
  • 啊,抱歉,我没有看到每个请求的 2 li!不过,我已将您的答案标记为正确,并对其进行了升级!非常感谢。
猜你喜欢
  • 2010-12-14
  • 2018-06-18
  • 2018-04-27
  • 2015-10-13
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
相关资源
最近更新 更多