2013-01-17 75 views
1

只要沒有會話,我的應用程序就會將用戶重定向到登錄頁面。但對於Ajax請求,此重定向不會發生。我如何重定向到任何其他頁面的JSON請求類型?

我需要處理應用程序中所有ajax調用的重定向問題。

+0

什麼是您的服務器端語言?你爲什麼認爲這沒有發生? –

+0

我的服務器端語言是java,請求類型是json。它正在重定向到登錄頁面(如果我是螢火蟲觀察員)。但屏幕沒有重新加載。 –

+0

@GRM你使用jQuery或其他庫嗎? –

回答

0

您可以在AJAX成功塊中使用window.location將用戶重定向到目標頁面。

+1

嗨Wasim,這個實現對單個Ajax請求很有用。但在我的應用程序中,許多Ajax請求都在那裏。例如一個單頁面有15到30個Ajax請求。這將很難處理每個請求。需要用最少的代碼處理所有的ajax請求。 –

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; 
       } 

      }); 
+1

嗨,這個實現對於單個Ajax請求很好。但在我的應用程序中,許多Ajax請求都在那裏。例如一個單頁面有15到30個Ajax請求。這將很難處理每個請求。需要用最少的代碼處理所有的ajax請求。 –

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

Thankyou @FAngel。我會研究這方面的內容。 –

-1

你需要在ajax函數中指定數據類型是json。

$.ajax({ 

    url: url, 

    type: "get", 

    dataType: "json", 

    success: function(data){ 

    }, 
    error: function(){ 
     // error operation 
    }, 
    complete: function(){ 
     // complete operation  
    } 
}); 
+0

數據類型只是json,沒有什麼區別 –

相關問題