JQuery $ .ajax设置cookie并获取html响应

时间:2015-10-05 12:00:24

标签: jquery python ajax cookies bottle

我想在用户空闲15分钟时向用户发出警告。

所以我做的是,我设置了一个在15分钟后过期的cookie并继续轮询服务器端页面,每10分钟刷新一次cookie过期时间。

我的问题是,我的ajax调用更新" cookie过期时间"没有任何回报。但它应该回归" OK"设置cookie后的html(这是在python,bottle中完成的。)

如果我在新标签页中打开此网址,则会延长Cookie过期时间并给我"确定"哪个是对的。但是当我使用Jquery ajax调用它时,它并没有返回任何内容。

这是Ajax请求的屏幕截图:

enter image description here

正如您所看到的,前两个请求正在使用正常的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/,这是在同一个域名中。

有人可以帮我这个吗?哪里我做错了?谢谢!

1 个答案:

答案 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();
        }
    }
});

希望这会对某人有所帮助。