我应该是一个非常简单的小过程。我有一个间隔计时器,当它到期时,对服务器进行ajax调用。随着json返回,它解析出来并更新DOM。 setInterval设置为一秒。然后,服务器对数据库执行非常简单的SELECT。它执行一个需要几毫秒才能执行的查询,如果是这样的话。
在我们的测试服务器上,它运行正常。但是,当它部署到我们的客户时,大部分时间都没有实际访问数据库。我们可以在查询分析器中看到它。应该有连续的查询流,但它们最多是零星的,通常是两次或更多次点击。
以下是代码:
setTimeout(function run() {
// When the timer elapses, get the data from the server
GetData(0);
setTimeout(run, _refreshRate);
}, 1000);
function GetData(isFirstLoad) {
//console.log("Attempting to obtain the data...");
jQuery.ajax({
url: "something.ashx",
type: "GET",
contentType: 'application/json; charset=utf-8',
success: function(resultData) {
//console.log("Got the data.");
ParseJson(resultData);
// show the last refresh date and time
$('#refreshTime').html(GetDateTime());
},
error : function(xhr, textStatus, errorThrown) {
if (textStatus == 'timeout') {
//console.log("Timeout occured while getting data from the server. Trying again.");
// If a timeout happens, DON'T STOP. Just keep going forever.
$.ajax(this);
return;
}
},
timeout: 0,
});
}
ParseJson(resultData);
内的所有内容都可以正常运行。用这条线......
$('#refreshTime').html(GetDateTime());
......即使数据库永远不会被击中,时间也会像钟表一样每秒刷新一次。
我可以在error
内的调试工具中放置一个断点,它永远不会被击中。
如果我们点击刷新,它会工作或几秒钟(我们可以看到查询到达数据库),但随后又会慢下来。
令人沮丧的是,它在我们的测试服务器上完美运行。但显然我忽视了一些事情。
修改
好的,这真的很奇怪。当我打开调试器时,它可以工作。一旦我关闭调试器,它就会停止工作。我甚至不必运行网络选项卡并捕获事件。只需打开调试器窗口即可使用。
这是IE,这是客户使用的,所以它是我们唯一的选择。
答案 0 :(得分:2)
在这里找到答案:
jQuery ajax only works in IE when the IE debugger is open
结果是iE,只有IE,才会缓存ajax响应。你必须告诉它不要。添加cache: false
就可以了。
function GetData(isFirstLoad) {
//console.log("Attempting to obtain the data...");
jQuery.ajax({
url: "something.ashx",
type: "GET",
contentType: 'application/json; charset=utf-8',
cache: false,
success: function(resultData) {