我有一个ajax调用,每5秒触发一次,以更新屏幕上的某些数据。似乎页面刷新后getJSON中断了。似乎正在发生的事情是,如果在呼叫发生时通过F5刷新页面,则将来的呼叫将不起作用。它们只是失败而没有错误消息。 textStatus是错误的,但是errorthrown是空的。我正在调用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中的错误,或者我错过了什么?
答案 0 :(得分:2)
这似乎是Chrome和已中止请求的缓存问题。即使在刷新页面后,一旦请求中止,它也不允许我向同一URL发送另一个请求。我通过使每个请求都是唯一的(通过时间戳)来解决它。
postRequest('realTimeActivity/GetRealTimeData?u=' + (new Date).getTime(), null, function (response) {
显然你也可以调用$ .ajax并将cache设置为false,这在幕后做同样的事情。