2016-03-05 75 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); 
    } 
} 
);