JQuery $.ajax 设置 cookie 并获得 html 响应
JQuery $.ajax set cookie and get html response
我有一个页面,我想在用户空闲 15 分钟时警告他们。
所以我所做的是,我设置了一个 15 分钟后过期的 cookie,并每隔 10 分钟轮询一次服务器端页面以刷新 cookie 过期时间。
我的问题是,我的 ajax 更新 "cookie expire time" 的调用没有 return 任何东西。但是在设置 cookie 后它应该 return "OK" 为 html(这是在 python、bottle 中完成的。)
如果我在新选项卡中打开此 url,它会延长 cookie 过期时间并给我 "OK",这是正确的。但是当我使用 Jquery ajax 调用它时,它没有 return 任何东西。
这是 Ajax 请求的屏幕截图:
如您所见,前两个请求使用正常的 ajax 调用,return 没有。
最后一个是当我使用 "Edit and Resend" 选项时 - 它采用类型 html 但前两次调用类型是普通的。
如果我在 firefox 开发者工具中尝试 "Edit and Resend" 选项,并在不做任何更改的情况下重新发送请求,它会起作用并且 returns "OK"。
可能是什么问题?我尝试了在 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")
假设我调用的URL是mysite.com/keepalive/
,这是同一个域名。
有人可以帮我解决这个问题吗?我哪里做错了?谢谢!!
Firefox 开发人员工具提供的错误信息要少得多。如果我在 chrome 中打开它,我可以看到它显示 "cancelled"。我稍微搜索了一下,意识到这是因为我的脚本没有等到 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();
}
}
});
希望这会对某人有所帮助。
我有一个页面,我想在用户空闲 15 分钟时警告他们。
所以我所做的是,我设置了一个 15 分钟后过期的 cookie,并每隔 10 分钟轮询一次服务器端页面以刷新 cookie 过期时间。
我的问题是,我的 ajax 更新 "cookie expire time" 的调用没有 return 任何东西。但是在设置 cookie 后它应该 return "OK" 为 html(这是在 python、bottle 中完成的。)
如果我在新选项卡中打开此 url,它会延长 cookie 过期时间并给我 "OK",这是正确的。但是当我使用 Jquery ajax 调用它时,它没有 return 任何东西。
这是 Ajax 请求的屏幕截图:
如您所见,前两个请求使用正常的 ajax 调用,return 没有。
最后一个是当我使用 "Edit and Resend" 选项时 - 它采用类型 html 但前两次调用类型是普通的。
如果我在 firefox 开发者工具中尝试 "Edit and Resend" 选项,并在不做任何更改的情况下重新发送请求,它会起作用并且 returns "OK"。
可能是什么问题?我尝试了在 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")
假设我调用的URL是mysite.com/keepalive/
,这是同一个域名。
有人可以帮我解决这个问题吗?我哪里做错了?谢谢!!
Firefox 开发人员工具提供的错误信息要少得多。如果我在 chrome 中打开它,我可以看到它显示 "cancelled"。我稍微搜索了一下,意识到这是因为我的脚本没有等到 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();
}
}
});
希望这会对某人有所帮助。