使用setInterval()重定向jQuery AJAX(轮询)

时间:2014-06-26 09:20:22

标签: jquery ajax asp.net-mvc redirect

我有一个使用setInterval()的简单队列系统,我使用jquery ajax检查后端的队列。当满足某些条件时,我想重定向到该人可以继续该过程的页面。

在Firefox上我按照我的预期重定向,但在IE和Chrome上却没有。 IE简单地给出了一个"这个页面无法显示"错误和Chrome提供了一个"此网页有一个重定向循环"错误。

任何想法出了什么问题?

这是我的代码:

$(document).ready(function () {
    StartTheTimer();

    function StartTheTimer(e) {
        var sec = parseInt($("#RefreshSeconds").val()) + 1;

        var timer = setInterval(function () {
            $('#spanQueueCountdown').text(--sec);

            if (sec == 1) {
                $('#spanSeconds').text('second');
            }
            else {
                $('#spanSeconds').text('seconds');
            }

            if (sec == 0) {

                clearInterval(timer);

                $.ajax({
                    type: "POST",
                    url: "/Purchase/CheckQueue",
                    data: {
                        applicationSessionId: $("#ApplicationSessionId").val(),
                        eventId: $("#EventId").val(),
                        ordernumber: $("#OrderNumber").val()
                    },
                    cache: false,
                    dataType: "json",
                    success: function (result, textStatus, jqXHR) {
                        if (result.success && jqXHR.status == 200) {
                            if (!result.redirect) {
                                $("#spanQueueNumber").text(result.positionInQueue);

                                StartTheTimer();
                            }
                            else {
                                window.location.replace(result.redirecturl);
                            }
                        }
                        else {
                            console.log('Checking the queue failed.')
                            window.location.href = "/";
                        }
                    },
                    error: function () {
                        console.log('Error in checking queue.')
                        window.location.href = "/";
                    }

                });
            }

            if ($('#spanQueueNumber').text() == 0) {
                clearInterval(timer);
                $('#spanQueueCountdown').text(0);
            }
        }, 1000);
    }
});

2 个答案:

答案 0 :(得分:0)

您在}方法

之后缺少结束括号StartTheTimer

答案 1 :(得分:0)

我解决了我的问题,但这并不理想。

我在页面中添加了一个额外的div,其中一个链接需要在用户位于队列前面时进行跟踪。我能够 - 从ajax成功方法中 - 隐藏解释进入队列的过程的部分,然后显示带有要遵循的链接的div。

但是,请求的行为是页面在用户到达队列前面时自动重定向。所以这是妥协。

如果有人能向我解释为什么我想要完成的是不可能的,请这样做。否则,如果有其他人知道我做错了什么,也请这样做。我很想给客户提供他期望的东西。