嵌套的JSON GET函数

时间:2011-06-07 16:53:44

标签: json jquery nested

我正在寻找一种拥有.getJSON的方法,调用另一个函数,该函数返回另一个.getJSON调用。

我在我的Controller上迭代地调用JSON方法,并且如果满足某个条件则想要完成这个迭代循环。如果满足此条件(只能在JSON方法中检查),我想在Controller上调用另一个JSON方法(保留一些数据等)。

但是,永远不会进行第二次JSON调用。当我在第一个函数之外手动调用第二个函数时,调用正确。

对此的任何提示或我的设计是否完全有缺陷?

修改

Chyeaah ..忘了代码......:D

 <script type="text/javascript">
    $(window).load(function() {
        var poller = setInterval(tick, 1000);
    });
    function tick() {
        $.getJSON("votingtick", function(voting) {
            if (voting != null) {
                if (voting.timeleft < 0) {
                    clearInterval(poller);
                    finalize();
                } else {
                    $("#timeout").text(voting.timeleft);
                    $("#voters").text(voting.votingCount);
                }
            }
        });
    }
    function finalize() {
        $.getJSON("votingend", function(voting) {
            if (voting != null) {
                $("#finished").fadeIn('fast');
            }
        });
    }
</script>

认为这是最相关的,不是吗?

2 个答案:

答案 0 :(得分:1)

我怀疑你的poller变量存在范围问题。它可能只在您的$(window).load函数中定义,而不是其他任何地方。因此,当浏览器尝试执行clearInterval时,将抛出异常并中止脚本。您可以使用try catch包围$.getJSON函数中的代码来验证这一点。

如果删除该函数中的var关键字,则poller将成为一个全局变量,您可以在脚本中的任何位置引用它。

答案 1 :(得分:1)

这可能是因为当您使用未定义的值调用clearInterval时出现错误。您在poller事件处理程序中本地声明了变量load,因此它在它之外是未定义的。

在函数外声明它:

var poller;
$(window).load(function() {
    poller = setInterval(tick, 1000);
});