Вложенные функции JSON GET - PullRequest
0 голосов
/ 07 июня 2011

Я ищу способ получить .getJSON, вызвать другую функцию, которая в свою очередь выполняет другой вызов .getJSON.

Я итеративно вызываю метод JSON на моем контроллере и хочу завершить этот итерационный цикл, если выполняется определенное условие. Если это условие выполнено (может быть проверено только из метода JSON), я хочу вызвать другой метод JSON на контроллере (сохранение некоторых данных и т. Д.).

Однако второй вызов JSON никогда не выполняется. Когда я вызываю вторую функцию вручную вне первой, вызов выполняется правильно.

Есть какие-нибудь намеки на это или мой дизайн в любом случае совершенно некорректен?

EDIT

Чиааа .. забыл код ..: 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 ]

1 голос
/ 07 июня 2011

Это, вероятно, потому что вы получаете сообщение об ошибке при вызове clearInterval с неопределенным значением. Вы объявляете переменную poller локально в обработчике событий load, поэтому она не определена вне ее.

Объявите это вне функции:

var poller;
$(window).load(function() {
    poller = setInterval(tick, 1000);
});
1 голос
/ 07 июня 2011

Я подозреваю, что у вас проблема с областью действия вашей переменной poller. Вероятно, он определен только в вашей функции $(window).load и больше нигде. Поэтому, когда браузер пытается выполнить clearInterval, генерируется исключение и сценарий прерывается. Вы можете убедиться в этом, окружив код в вашей функции $.getJSON попыткой catch.

Если вы удалите ключевое слово var в этой функции, poller станет глобальной переменной, на которую вы можете ссылаться в любом месте скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...