2011-03-23 74 views
-1

這是我用來按固定時間間隔打網址的示例代碼。如果目標網址未返回,該怎麼辦

$(document).ready(function() { 
    var counter = 1; 

    $.doTimeout(1000, function() { 
     $.ajax({ 
      type: "GET", 
      url: "<%=encodeUrl%>", 
      timeout: 10000, 
      dataType: "text", 

      complete: function(resp) { 
       if (resp.status == 200) { 
        $("#msg").html(counter++); 
       } else { 
        $("#msg").html("Failed"); 
        return true; 
       } 
      } 
     }); 
    }); 
}); 

目標URL是一個將控制權轉發給另一個JSP的servlet。根據我的理解,我必須重定向到新頁面。但它顯示與計數器值1相同的頁面。意味着,從目標servlet重定向不起作用。並且迴應將回到同一頁面。

+1

servlet代碼?.. – Bozho 2011-03-23 08:15:14

+0

我的servlet做什麼,但檢查DB值。如果存在值,則重定向到另一個JSP頁面。否則返回致電頁 – 2011-03-24 04:07:43

回答

0

AJAX並不意味着重定向。這些標題不會被您的瀏覽器執行,因此您可以繼續瀏覽該頁面! 你的servlet給出的確切代碼是什麼?

+0

好吧!在你的建議中,我刪除了中間頁面。我已經在需要重定向的JSP上放置了ajax代碼。如果一切正常,我會顯示頁面內容。否則顯示適當的頁面。謝謝 – 2011-03-24 04:09:54

0

該代碼正在做它寫的任務。您正在發射ajax呼叫,並且在響應200中,您將計數器設置爲#msg的html。代碼中沒有任何內容會讓您重定向到New Page

如果你想重定向,你不需要ajax。否則,如果您的重定向基於servlet返回的響應,請將其捕獲到complete中,並設置window.location.href = 'your/redirect/url/'以加載新頁面。

+0

window.location.href是一個不錯的選擇。但是由於url在運行時被編碼,所以我無法使用它。並且一些動態參數被添加到URL中。 – 2011-03-24 03:56:40

2

當您的AJAX響應重定向到另一個頁面時,重定向頁面將作爲您的AJAX請求的響應提取,這就是爲什麼您的HTTP狀態只有200。

您無法根據您通過AJAX收到的HTTP狀態碼處理重定向。

AJAX響應無法將您重定向到其他頁面,除非您將其編程。

因此,如果您想根據您的AJAX響應進行重定向,則應修改服務器端代碼,將重定向網址作爲響應發送給您,而不是重定向。

參考one of answers with example solution

+0

請注意,「forward」是特定的JSP/Servlet術語,這意味着控制器servlet已被指示使用指定的JSP文件作爲視圖。這裏沒有HTTP 3nn重定向的方法。 – BalusC 2011-03-23 13:58:01

相關問題