2011-09-20 64 views
6

我在寫一個需要用戶身份驗證的jQuery Mobile應用程序。同一個用戶不能從多個位置打開她的會話:如果用戶從另一個瀏覽器登錄,則以前的會話被標記爲死亡。如何處理jQuery Mobile中的頁面更改錯誤

如果用戶嘗試使用瀏覽器移動到另一個頁面並顯示死機會話,則會顯示「錯誤加載頁面」消息。這很糟糕,因爲用戶可能不知道她爲什麼會得到這個錯誤。是否有可能挖掘到錯誤事件,以便我可以檢查會話的狀態並將用戶重定向到登錄頁面(如果會話已死掉)?

回答

1

我結束了分叉的jQuery Mobile和添加添加自定義錯誤處理程序的能力:https://github.com/jquery/jquery-mobile/pull/2504我認爲這要優於其他建議,因爲它不會添加任何開銷,除非實際發生錯誤。

更新:在jQuery Mobile RC1中會有一個新的pageloadfailed事件。這將優雅地根據項目標準解決這個問題。

0
$(a).click(function(){ 
    // check for session? 
}); 
+0

這是解決這個問題的一種方式,但它可能是一個有點過分

更多信息。這將會使請求數量(約)增加一倍,並且該應用程序主要用於移動設備,這可能會成爲一個明顯的問題。 –

2

相關:

您可以使用類似

pagebeforeshow

在轉換開始之前,在所顯示的頁面上觸發。

例(僞代碼):

$('#pageId').live('pagebeforeshow',function(event, ui){ 
    // check session here 
    if(!$session) { 
     // redirect to login 
     $.mobile.changePage('#login'); 
    } 
}); 
+0

這是一個更好的解決方案。但是,這仍然有點矯枉過正。我正在考慮做一個jQuery Mobile的分支,並添加一個可訂閱的錯誤事件,所以我只能在發生錯誤時才處理錯誤。然後再提前優化是很危險的,所以我現在可能會推薦你的建議。 :) –

+0

這畢竟沒有幫助。如果頁面加載失敗,則不會觸發pagebeforeshow和pagebeforehide事件。 –

+0

我的下一個建議是使用AJAX並檢查Apache的響應,例如:如果您得到200個響應,那麼您很好,否則...可能需要映射更多的響應以及這只是一個概念 –

3

怎麼樣

pagechangefailed 

事件?

頁面加載失敗時會觸發它,這似乎是這種情況。在http://jquerymobile.com/test/docs/api/events.html

+0

是的,這在最近的版本中可用。然而,在9月份還沒有實施時,我又遇到了這個問題。在我自己的回答中,我描述了pageloadfailed事件。顯然pagechangefailed也可以。 –

相關問題