[英]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.