1

只要没有会话,我的应用程序就会将用户重定向到登录页面。但是对于 Ajax 请求,这种重定向不会发生。

我需要为应用程序中的所有 ajax 调用处理这个重定向问题。

4

3 回答 3

1

我在 Zend/PHP 项目上做了类似的事情。不幸的是,我不熟悉 Java,我只能建议基本方向。

默认情况下,XMLHttpRequest 执行重定向。因此,如果您在 ajax 请求期间执行重定向,XMLHttpRequest 将执行它,而不会让您知道重定向发生了。至少我没有办法捕捉到这种情况并以某种方式处理它。因此,在服务器端,我覆盖了重定向方法。假设你也可以在 Java 中做类似的事情。一旦请求来自 ajax(您可以在 ajax 请求中添加一些特定的标头并在服务器上检查它),您可以返回与标头不同的Location标头。例如,New-Location, 并没有实际的重定向。只需停止请求执行。

在客户端,您可以使用jQuery.ajaxSetup一次性为所有 ajax 请求配置全局处理程序。以下是如何向所有请求添加标头.ajaxSetup

$.ajaxSetup({
    headers: {
        XHTTPRequest: 'true'
    }
});

此外,您可以设置全局ajaxSuccessajaxError处理程序。它们将在单独的 ajax 请求的任何成功/错误处理程序之前执行。在全局 ajax 成功中,您可以从xhr作为第三个参数传递给回调函数的对象中获取标头并执行重定向:

var newLocation = xhr.getResponseHeader("New-Location");
if(newLocation)
     document.location = newLocation;

基本上,您可以返回特殊对象而不是标头,或者找到其他方法将新位置传递给您的ajaxSuccess回调。

于 2013-01-22T08:40:29.917 回答
0

我这样做的方式:

服务器端:

    define('BASE_URL','http://www.yourdomain.com');

    if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
        // if it's an ajax request

        $json['success'] = 1;
        $json['redirect'] = BASE_URL.'/logout';
        echo json_encode($json);
    }else{
        // if it's an non ajax request


    }

客户端使用 jquery:

        $.ajax({
              type: "POST",
              url: 'www.yourdomain.com',

              data: {test: 1},
              complete: function(e, xhr, settings){
                  switch(e.status){
                      case 500:
                         alert('500 internal server error!');
                         break;
                      case 404:
                          alert('404 Page not found!');
                         break;
                      case 401:
                          alert('401 unauthorized access');     
                         break;       
                  }
              }
            }).done(function( data ) {

                var obj = jQuery.parseJSON(data)

                if (obj.success == 1){
                     var url = obj.redirect;
                     location.href = url;
                }

            });
于 2013-01-17T10:40:00.953 回答
0

您可以在 AJAX 成功块中使用window.location将用户重定向到目标页面。

于 2013-01-17T10:22:05.053 回答