如何重定向到json请求类型的任何其他页面?

时间:2013-01-17 10:15:15

标签: javascript ajax json

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

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

3 个答案:

答案 0 :(得分: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回调。

答案 1 :(得分:0)

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

答案 2 :(得分: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;
                }

            });