繁体   English   中英

getJSON中断页面刷新(F5)。 怎么修?

[英]getJSON breaks on page refresh (F5). How to fix?

我有一个Ajax调用,每五秒钟触发一次,以更新屏幕上的某些数据。 刷新页面后,getJSON似乎中断了。 似乎正在发生的情况是,如果在通话进行时通过F5刷新页面,则以后的通话将无法进行。 它们只是失败而没有错误消息。 textStatus是错误,但错误抛出为空。 我正在调用Asp.Net MVC控制器,并且那里没有引发任何错误。 随后的getJSON调用永远不会到达服务器。 在这一点上,直到我再次启动和停止我的网站之前,它几乎都已完成。 不知道如何解决此问题,因为我无法阻止用户刷新页面,因此测试更新是我的痛苦。

这是我的代码:

var RealTimeActivity = (function () {
    var realTimeActivity = {};
    var timer = null;
    var active = false;

    realTimeActivity.LastUpdated = new Date();

    function queueUpdate() {
        timer = setTimeout("RealTimeActivity.Update();", 5000);
    }

    function reset() {
        clearTimer();
        queueUpdate();
    }

    function clearTimer() {
        if (timer) {
            clearTimeout(timer);
            timer = null;
        }
    }

    realTimeActivity.Update = function () {
        try {
            clearTimer();
            if (active === true) {
                $.getJSON("realTimeActivity/GetRealTimeData",
                    function (result) {
                        if (result.Success) {
                           // do stuff
                        } else {
                           // Other stuff
                        }

                        queueUpdate();
                    }
                ).fail(function (jqXHR, textStatus, errorThrown) {
                    console.log(textStatus + ": " + errorThrown);
                    reset();
                })
            }
        } catch (ex) {
            reset();
        }
    }

    realTimeActivity.Start = function (i) {
        active = true;
        if (i) {
            realTimeActivity.Update();
        } else {
            queueUpdate();
        }
    }

    realTimeActivity.Stop = function () {
        active = false;
        clearTimer();
    }

    return realTimeActivity;
}());

编辑:这似乎只能在Chrome中重现。 chrome中的错误,或者我缺少什么?

Chrome似乎是一个缓存问题,请求已中止。 一旦中止请求,即使刷新页面后,也不允许我将另一个请求发送到相同的URL。 我通过使每个请求都唯一(通过时间戳)来解决此问题。

  postRequest('realTimeActivity/GetRealTimeData?u=' + (new Date).getTime(), null, function (response) {

显然,您也可以调用$ .ajax并将缓存设置为false,这在幕后也做同样的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM