2009-11-09 64 views
0

我有這個問題,我的網站使用了很多ajax,當用戶超時它們仍然在我的頁面上。現在說用戶離開10分鐘(超時設置爲10分鐘),現在用戶超時但仍在頁面上。如何將某些內容傳遞給Ajax.jQuery

所以他們可以做一個「保存」的請求,但現在我所有的操作方法,ajax請求都會有一個asp.net mvc授權標籤ontop。如果用戶沒有通過認證,那麼他們應該被重定向到「登錄頁面」,但由於它是ajax請求,他們不會發送到「登錄頁面」,什麼也不會發生。

所以我想也許我可以以某種方式回傳給ajax.Complete(如果它們仍然通過身份驗證),如果它是「false」,那麼從javascript進行重定向。

但是我不知道該怎麼做。我不知道如何傳遞迴它,如何編寫我的控制器方法。

回答

1

如果MVC產生401 Unathorized響應,那麼應調用jQuery ajax調用的失敗回調函數,併爲您提供XmlHttpRequest對象。您可以檢查XmlHttpRequest作爲401 XmlHttpRequest.status == 401的狀態代碼,然後通過您的腳本將頁面位置更改爲登錄名,如果您願意,甚至可以提供消息。無論它是否生成401,任何非成功狀態代碼都應該調用ajax請求的失敗回調,並且您應該能夠處理您在處理失敗的方法集中的情況。

像下面的通用代碼可以處理您的失敗。

function(xhr, errorText, ex){ 
    if(xhr.status == 401) { 
     //.. alert user and redirect to login .. 
     document.location = 'myloginpage.html'; 
    } 
    ... 
} 
+0

我會在哪裏放這段代碼(在哪裏jquery ajax one,success,error,start,stop)?還有一種情況是200,000個錯誤會回來。看看我有Jquery.UI選項卡,似乎正在發生的事情是它返回Url並將其加載到實際選項卡中。 – chobo2 2009-11-09 20:40:31

+0

你會將它附加到錯誤回調。在這種情況下你會得到200嗎? – 2009-11-09 20:42:48

+0

錯誤回調在哪裏?我可能會在下面的情況下收到一條錯誤消息。用戶走過大約10分鐘和超時,然後嘗試保存一些內容。將觸發器和ajax請求保存到服務器。 Authorize標籤阻止了這一點,並可能返回一個錯誤(不確定如何驗證哪個錯誤)。 第二種情況是這樣的。用戶離開10分鐘和超時,這次他碰到了我的一個啓用了ajax的jquery ui選項卡。它會去服務器加載這個局部視圖。但在此之前,授權標籤將停止用戶請求並將返回URL發回。 – chobo2 2009-11-09 20:46:27

0

一個簡單的方法可能是在發生超時後將頁面重定向到註銷/登錄頁面。大多數有這種超時的網站會首先給你一個警告。如果你點擊「確定」你的超時被重置。如果您點擊「取消」或只是保留,頁面將超時,您將被註銷,並且您將被重定向到另一頁面。

+0

雅,但我怎麼做這個警告的事情。就像我如何知道服務器是否即將超時? – chobo2 2009-11-09 20:38:59

+0

我之前所做的是,找出會話何時會在服務器上過期,然後在JS中設置一個超時「setTimeout(expression,timeout)」來彈出警告,讓用戶知道它會很快超時。如果用戶單擊確定,則進行AJAX調用以重置服務器上的超時。如果不是,則應該有一個超時重定向用戶,即設置爲與服務器會話超時相同的時間。 – 2009-11-10 13:57:38

+0

以下是一個示例http://www.sidesofmarch.com/index.php/archive/2005/01/30/friendly-session-timeouts-the-javascript-way/ – 2009-11-10 13:59:31

相關問題