我想在用户空闲15分钟时向用户发出警告。
所以我做的是,我设置了一个在15分钟后过期的cookie并继续轮询服务器端页面,每10分钟刷新一次cookie过期时间。
我的问题是,我的ajax调用更新" cookie过期时间"没有任何回报。但它应该回归" OK"设置cookie后的html(这是在python,bottle中完成的。)
如果我在新标签页中打开此网址,则会延长Cookie过期时间并给我"确定"哪个是对的。但是当我使用Jquery ajax调用它时,它并没有返回任何内容。
这是Ajax请求的屏幕截图:
正如您所看到的,前两个请求正在使用正常的ajax调用,它们什么都不返回。
最后一个是我使用"编辑和重新发送"选项 - 它将类型视为html,但前两次调用类型为plain。
如果我尝试"编辑并重新发送" firefox开发人员工具中的选项,并重新发送请求而不更改任何内容,它可以工作并返回"确定"。
可能是什么问题?我尝试了在SO和Jquery文档中找到的所有可能的东西。但似乎没有什么对我有用。这是我的最终代码。
$.ajax({
timeout: options.AJAXTimeout,
url: options.keepAliveURL,
dataType:"html",
error: function(){
self.failedRequests--;
},
success: function(response){
if($.trim(response) !== options.serverResponseEquals){
self.failedRequests--;
}
},
complete: function(){
if( recurse ){
self._startTimer();
}
}
});
我更新Cookie的页面:
@app.route('/keepalive/', method = 'GET')
@app.route('/keepalive', method = 'GET')
def keepalive():
expire_date = datetime.datetime.utcnow()
expire_date = expire_date + datetime.timedelta(minutes=15)
ses_key=request.get_cookie('session_key')
response.set_cookie("session_key", ses_key, expires=expire_date, path="/")
response.content_type = 'text/html; charset=UTF-8'
return template('<div>{{msg}}</div>', msg = "OK")
假设我调用的网址是mysite.com/keepalive/
,这是在同一个域名中。
有人可以帮我这个吗?哪里我做错了?谢谢!
答案 0 :(得分:0)
Firefox开发人员工具提供的错误信息非常少。如果我用chrome打开它,我可以看到它说“已取消”。我搜索了一下并意识到它发生是因为我的脚本没有等到ajax调用完成。
在我将async:false
添加到我的ajax请求后,它已修复。
那是;
$.ajax({
timeout: options.AJAXTimeout,
url: options.keepAliveURL,
dataType:"html",
async:false, // ---> added this option.
error: function(){
self.failedRequests--;
},
success: function(response){
if($.trim(response) !== options.serverResponseEquals){
self.failedRequests--;
}
},
complete: function(){
if( recurse ){
self._startTimer();
}
}
});
希望这会对某人有所帮助。