2011-04-13 64 views
0

如果用戶登錄,那麼ajax請求正常工作。當會話失效時,ajax返回登錄屏幕,用戶可以將登錄屏幕視爲ajax內容。是否有可能在Ext Js中添加自定義代碼,這將在每個Ajax請求中運行,以檢查會話是否仍然有效,如果會話無效,則JavaScript將重定向到登錄頁面,否則它將繼續正常執行Ajax請求。是否可以在每個Ajax請求中執行自定義代碼而無需手動將該代碼添加到Ext Js中的每個ajax代碼?

回答

2

Ext.ajax是一個單例,因此您可以爲所有請求錯誤定義全局處理程序。

如果用戶未被授權,則您的服務器端代碼將需要返回HTTP 403或類似信息。將這個地方(僅一次)在你的代碼代碼:

Ext.Ajax.on('requestexception', function(conn, response, options) { 
    if (response.status == 403) { 
     Ext.MessageBox.alert('Authentication', 'You are not logged in.'); 
     /* you can display a login box or something here */ 
    } 
}; 

如果一個AJAX請求失敗,因爲會話已過期,你可以在你的代碼優雅地處理它。

options參數包含AJAX請求選項,因此如果向用戶顯示登錄框並對其進行重新認證,則可以重新提交他們自動創建的原始AJAX請求。這個過程對於所有其他現有代碼都是無縫的,這些代碼會發出AJAX請求。

1

檢查會話是否仍然有效應在服務器中完成。不在JavaScript中。

我們不相信客戶。

+0

這是在服務器端完成的,但Ext Js就像JavaScript操作系統,所以它會更容易檢查會話是否在每個Ajax請求中自動生效,而不是爲每個Ajax請求編寫相同的代碼。 – newbie 2011-04-13 11:27:24

+0

@newbie爲什麼要檢查客戶端?只需將一些中間件添加到服務器上的ajax處理程序,以檢查會話並在出現錯誤時返回登錄屏幕。 – Raynos 2011-04-13 12:35:56

0

你可以修改你的Ajax過程有兩種方式:

1服務器端:在接收到的請求,檢查會話 - 如果沒有登錄或會話過期的用戶,返回一個HHTP 403(=未授權)。 2-客戶端:作爲ajax響應處理程序的一部分,檢查錯誤403.如果返回,請求登錄並將其發送到服務器,然後當登錄成功時,重新發送原始請求。

這很簡單,如果你不使用太多現成的ajax庫。如果你是,看看它的功能。