Javascript &引用;心跳“;记录器质量

Javascript &引用;心跳“;记录器质量,javascript,ajax,Javascript,Ajax,好的,我发布了一个“恼人的弹出式”问题,作为“记录”某人在页面上花费的时间的解决方案,普遍的共识是使用ajax调用计时器向服务器报告用户仍在页面上。。。(下面是我用的代码) 我遇到的一个问题是httRequest似乎被缓存了。。。每个返回显示相同的“时间戳” var-closeMe=0; var-logMe=0; //窗口没有焦点,什么也不做或者做一些让他们知道我们现在没有登录的事情 函数onBlur(){ ///停止日志间隔 清除间隔(logMe); //非聚焦2分钟后,将其关闭。 clos

好的,我发布了一个“恼人的弹出式”问题,作为“记录”某人在页面上花费的时间的解决方案,普遍的共识是使用ajax调用计时器向服务器报告用户仍在页面上。。。(下面是我用的代码)

我遇到的一个问题是httRequest似乎被缓存了。。。每个返回显示相同的“时间戳”


var-closeMe=0;
var-logMe=0;
//窗口没有焦点,什么也不做或者做一些让他们知道我们现在没有登录的事情
函数onBlur(){
///停止日志间隔
清除间隔(logMe);
//非聚焦2分钟后,将其关闭。
closeMe=setInterval('window.close()',120000);//非聚焦2分钟后,将其关闭。
}
//窗口有焦点。。。继续记录。
函数onFocus(){
//停止关闭计数器-如果某个时间“模糊”
clearInterval(closeMe);
//按计划运行AJAX—我们每分钟都在运行—但是您可以随时执行
logMe=setInterval('logTime()',60000);
}
//调用记录另一分钟的脚本。。。
函数logTime(){
var xhReq=新的XMLHttpRequest();
open(“GET”,“ajax on time interval.cfm”,false);
xhReq.send(空);
var serverResponse=xhReq.responseText;
警报(服务器响应);
} 
//检查Internet Explorer。。。IE使用“聚焦输入/输出”-其他所有内容都使用“聚焦/模糊”
如果(/*@cc_on!@*/false){
document.onfocusin=onFocus;
document.onfocusout=onBlur;
}否则{
window.onfocus=onfocus;
window.onblur=onblur;
}
“ajax on time interval.cfm”的代码 #现在我想你可以用

$.ajaxSetup({
cache: false
});
或者是这样的…

我想你可以用

$.ajaxSetup({
cache: false
});

或者是这样的…

IE缓存Ajax请求。为了停止这种情况,我通常只需在请求中添加一个随机变量:

function logTime() {
    var xhReq = new XMLHttpRequest();
    xhReq.open("GET", "ajax-on-time-interval.cfm?random="+Math.random(), false);
    xhReq.send(null);

    var serverResponse = xhReq.responseText;
    alert(serverResponse); 
}

只要不解析后端上的新“随机”变量,这应该可以工作:-)

IE缓存Ajax请求。为了停止这种情况,我通常只向请求中添加一个随机变量:

function logTime() {
    var xhReq = new XMLHttpRequest();
    xhReq.open("GET", "ajax-on-time-interval.cfm?random="+Math.random(), false);
    xhReq.send(null);

    var serverResponse = xhReq.responseText;
    alert(serverResponse); 
}

只要您不解析后端上的新“随机”变量,这应该可以工作:-)

如果您只是ping服务器,而不关心返回的是什么,那么您可以通过发出HEAD请求而不是完整get

另外,使用同步请求是一个非常糟糕的主意。这意味着,如果与服务器的连接因任何原因而损坏,用户的浏览器将冻结,他们将无法执行任何操作。通过在服务器端代码上添加长时间睡眠时间并播放页面来测试。用户的浏览器将不喜欢这种类型的ping,因此请将其替换为异步罗诺斯

要停止缓存,您应该在服务器端代码上设置正确的头。如果未设置正确的头,浏览器将缓存页面。这就是get请求的作用,以提高您的浏览效率

如果您想强制它总是获取最新的,最简单的方法是附加一个发生变化的querystring值。Math.random()是一个常见的选择,但更好的选择是
new Date().getTime()
,因为它在同一台机器上总是不同的值

"ajax-on-time-interval.cfm?ts=" + (new Date().getTime())

如果您只是ping服务器,而不关心返回的是什么,那么您可以通过发出HEAD请求而不是完全获取

另外,使用同步请求是一个非常糟糕的主意。这意味着,如果与服务器的连接因任何原因而损坏,用户的浏览器将冻结,他们将无法执行任何操作。通过在服务器端代码上添加长时间睡眠时间并播放页面来测试。用户的浏览器将不喜欢这种类型的ping,因此请将其替换为异步罗诺斯

要停止缓存,您应该在服务器端代码上设置正确的头。如果未设置正确的头,浏览器将缓存页面。这就是get请求的作用,以提高您的浏览效率

如果您想强制它总是获取最新的,最简单的方法是附加一个发生变化的querystring值。Math.random()是一个常见的选择,但更好的选择是
new Date().getTime()
,因为它在同一台机器上总是不同的值

"ajax-on-time-interval.cfm?ts=" + (new Date().getTime())

根据给出的示例代码,它看起来没有使用jQuery。根据给出的示例代码,它看起来没有使用jQuery。我认为更标准的方法是使用时间戳-Date.now().toString()@matt将其保留为int类型而不是随机双精度。很好的建议我认为更标准的方法是使用timestamp-Date.now().toString()@matt将其保留为int类型而不是随机双精度。很好的建议