2009-08-22 93 views
1

我有一個「在線用戶」列表,我每30秒用prototype.js中的Ajax.PeriodicalUpdater刷新一次。在用戶註銷時停止Prototype.js Ajax.PeriodicalUpdater

存在一個問題,即如果用戶有兩個打開站點的選項卡/窗口,則在其中一個登出時,PeriodicalUpdater不會取消。

這意味着PeriodicalUpdater會更新我的塊元素和整個登錄頁面,因爲我有一個平穩的身份驗證,它會重定向到該頁面。

我正在使用PHP會話,我真的無法讓我的頭在這一個。

你們中的任何人都可以指引我朝着正確的方向嗎?

回答

0

我會考慮更改返回結果的方法,以便它不需要通過身份驗證的會話來訪問它,但它會返回只有當有認證會話時纔有效的信息。否則,它會返回一個值,指示更新應該停止,並在您的在線用戶的塊中顯示一條適合的消息。這意味着您可能需要返回JSON - 而不是一件壞事 - 並且將其作爲JSON的一部分與HTML片段結合使用,或者僅從JSON數據構建客戶端上的HTML(更好的IMO自該視圖是標記的正確位置)。

+0

當然!男人,你是明星。我的訪問控制類中已經有一個排除文件列表。 我將onlineList.php添加到我的$ excludedPages數組中,將整個頁面包裝在if(isset($ _ SESSION ['user_id'])) - 一切都很好。 非常感謝! – Preben 2009-08-22 13:11:45

0

在創建PE,保持對它的引用:

// At global scope, or ideally if you have a namespaced object, use that 
var thePE; 

// Where you create the PE 
thePE = new PeriodicalExecuter(yourFunction, 3); 

當你想讓它停下來,告訴它停止(假設它已經啓動):

if (thePE) { 
    thePE.stop(); 
    thePE = undefined; 
} 

( PeriodicalExecuter#停止文檔here。)

+0

感謝您的提示!我試圖弄清楚,何時何地我真的希望它停止。有什麼方法可以檢查我的PHP會話是否仍然在JavaScript中處於活動狀態? – Preben 2009-08-22 13:05:06