2015-10-05 71 views
1

我有一個頁面,我想在用戶閒置15分鐘時提醒用戶。

所以我做的是,我設置了一個cookie,在15分鐘後過期,並保持輪詢服務器端頁面,每10分鐘刷新cookie過期時間。

我的問題是,我的ajax調用來更新「cookie過期時間」不會返回任何內容。但它應該在設置cookie後返回「OK」作爲html(這是在python,bottle中完成的)。

如果我在新選項卡中打開此URL,它會延長cookie的過期時間並使我「OK」是正確的。但是當我用Jquery ajax調用它時,它不會返回任何東西。

這裏是Ajax請求的截圖:

enter image description here

正如你可以看到,前兩個請求使用正常的Ajax調用,這回什麼。

最後一個是當我使用「編輯和重新發送」選項 - 它需要類型爲html,但前兩個調用的類型很簡單。

如果我嘗試使用firefox開發人員工具中的「編輯並重新發送」選項,並重新發送請求而不更改任何內容,它將起作用並返回「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") 

說我所說的網址是mysite.com/keepalive/,這是同一個域名之內。

有人可以幫助我嗎?我在哪裏做錯了?謝謝!!

回答

0

Firefox開發人員工具提供的錯誤信息非常少。如果我用鉻打開它,我可以看到它說「取消」。我搜索了一下,發現它發生是因爲我的腳本沒有等到ajax調用完成。

因此,在我向我的ajax請求添加async:false之後,它得到修復。

即,

$.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(); 
     } 
    } 
}); 

希望這會幫助別人。