jqgrid - 每个ajax请求后的fire事件

时间:2016-03-05 05:29:50

标签: javascript jquery ajax jqgrid

我在java spring项目中使用jquery jqGrid插件。我正在使用服务器端分页和排序,所以当用户更改页面时,jqgrid会发送一个ajax请求。我的问题是,有时用户的会话可能在ajax请求和我的服务器端代码期间超时,将ajax请求重定向到登录页面。 我需要检测jqgrid ajax请求中的服务器重定向。实际上,我希望在每次jqgrid请求之后触发 afterRequest 事件。我看到loadCompletebeforeProcessing事件,但这些事件在有数据的请求之后触发,如果请求在服务器上没有数据或重定向,则这些事件不会触发。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

我认为你必须改变你的要求。重定向在透明级别上 ,它是XMLHttpRequest规范的一部分(请参阅herethe old answer)。您可能需要设置服务器端所需的标头(例如通过xhrFields: { withCredentials: true }设置jQuery.ajax ajaxGridOptions: { xhrFields: { withCredentials: true } }选项)。如果需要,您可以使用Access-Control-Allow-Origin回调指定loadBeforeSend HTTP标头的任何其他特定值。它有jqXHR个对象作为参数,它是XMLHTTPRequest对象的扩展。因此,您可以使用jqXHR.setRequestHeader方法(请参阅the answer)来实际自定义请求。

如果重定向后的最终响应有另一个正文,那么您可以在beforeProcessingloadError回调中检测到它。两个回调都包含jqXHR`对象作为参数。因此,您可以完全访问基础Ajax响应中的所有信息。

很抱歉,我无法向您提供更多详细信息,但您的问题不包含有关此问题的技术详细信息(例如HTTP跟踪)。

答案 1 :(得分:0)

您可以使用此脚本中的globa ajax管理处理任何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);
   }
 }
);