2016-03-05 76 views
0

我在我的java彈簧項目中使用jQuery jqGrid插件。我使用服務器端分頁和排序,所以當用戶更改頁面時,jqgrid發送一個ajax請求。我的問題是,有時用戶的會話可能在ajax請求和我的服務器端代碼期間超時,將ajax請求重定向到登錄頁面。 我需要在jqgrid ajax請求中檢測服務器重定向。事實上,我想要一個afterRequest事件,在每個jqgrid請求之後觸發。我看到loadCompletebeforeProcessing事件,但這些事件在具有數據的請求之後觸發,如果請求沒有數據或服務器上的重定向,則這些事件不會觸發。我怎樣才能做到這一點?jqgrid - 每個Ajax請求後發生火災事件

回答

0

我認爲你必須改變你的要求。重定向在透明級別上工作,它是XMLHttpRequest規範的一部分(參見herethe old answer)。您可能需要的是設置服務器端所需的標頭(如通過ajaxGridOptions: { xhrFields: { withCredentials: true } }設置xhrFields: { withCredentials: true }選項jQuery.ajax)。如果需要,您可以使用loadBeforeSend回調來指定Access-Control-Allow-Origin HTTP標頭的任何其他特定值。它具有jqXHR對象作爲參數,這是XMLHTTPRequest對象的擴展名。因此,您可以使用例如jqXHR.setRequestHeader方法(請參閱the answer)來實際定製請求。

如果重定向後的最終響應有另一機構那麼您可以在beforeProcessingloadError回調中檢測它。這兩個回調都包含jqXHR`對象作爲參數。因此,您可以完全訪問來自基礎Ajax響應的所有信息。

對不起,我無法爲您提供更多詳細信息,但您的問題中沒有包含關於此問題的足夠技術細節(例如HTTP跟蹤)。

0

你可以處理爲與格洛巴阿賈克斯管理任何的jqGrid或其它部件的AJAX重定向在此腳本:

$(document) 
.ajaxStart(function() { $('#loadingPane').show(); }) /* catch ajax start event*/ 
.ajaxStop(function() { $('#loadingPane').hide(); }) /* catch ajax stop event */ 
.ajaxError(function(event, jqxhr, settings, exception) /* catch ajaxerror and specifically redirections */ 
{ 
    if (settings.url.indexOf("aspx")>0 && (jqxhr.status === 401 || jqxhr.status === 403)) { 
     event.stopPropagation(); 
     location.reload(true); 
    } 
} 
);