我正在寻找一种拥有.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>
认为这是最相关的,不是吗?
答案 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);
});