簡體   English   中英

jQuery $ .ajax設置cookie並獲取html響應

[英]JQuery $.ajax set cookie and get html response

我有一個頁面,我想在用戶閑置15分鍾時警告他們。

所以我要做的是,設置一個cookie,該cookie在15分鍾后過期,並不斷輪詢服務器端頁面以每10分鍾刷新一次cookie過期時間。

我的問題是,我的ajax調用更新“ cookie過期時間”不會返回任何內容。 但是在設置cookie后,它應該以HTML形式返回“ OK”(這是在python瓶中完成的。)

如果我在新標簽頁中打開此網址,則會延長Cookie的過期時間,並給我“確定”,這是正確的。 但是當我使用Jquery ajax調用它時,它不會返回任何內容。

這是Ajax請求的屏幕截圖:

在此處輸入圖片說明

如您所見,前兩個請求使用的是普通的ajax調用,該調用不返回任何內容。

最后一個是當我使用“編輯並重新發送”選項時-它將類型作為html,但是前兩個調用類型是普通類型。

如果我嘗試使用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/ ,並且該網址在同一域名內。

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

Firefox開發人員工具幾乎沒有提供有關該錯誤的信息。 如果我在Chrome中打開它,我會看到它顯示“已取消”。 我經過一番搜索,發現發生這種情況是因為我的腳本沒有等到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();
        }
    }
});

希望這會幫助某人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM