我有一个ajax调用,它每隔5秒启动一次,以更新屏幕上的一些数据。在页面刷新之后,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中重现。可能是铬里的虫子还是我漏掉了什么?
发布于 2013-09-10 17:58:27
这似乎是Chrome和中止请求的缓存问题。即使在刷新页面之后,它也不允许我在请求中止后发送另一个请求到相同的URL。我通过使每个请求都是唯一的(通过一个时间戳)来解决这个问题。
postRequest('realTimeActivity/GetRealTimeData?u=' + (new Date).getTime(), null, function (response) {显然,您也可以调用$.ajax并将缓存设置为false,这在幕后也是如此。
https://stackoverflow.com/questions/18643101
复制相似问题