2015-07-10 63 views
1

我想在從服務器獲得成功響應後實現重定向。我試圖按照here所述的相同方式進行操作,但不幸的是無法達到所需的行爲。jQuery Ajax調用後無法重定向

將數據發送到服務器,並應該執行重定向的功能如下:

$("#btn-login").click(function(){ 
       if ($('#loginform').valid() == false) { 
        return false; 
       } 
       var formData = $("form#loginform").serialize(); 
       $.ajax({ 
        type: "POST", 
        url: "/authentication/login", 
        data: formData, 
        success: function(data, textStatus){ 
         console.log(formData); 
         //console.log(data); 
         if(data.redirect){ 
          window.location.href = data.redirect; 
         } 
        }, 
        error: function(e){ 
         alert(e.responseText); 
        } 
       }); 
      }); 

在服務器端,則執行followoing功能:

/* Handle Login POST */ 
router.post('/login', passport.authenticate('login', { 
    successRedirect: '/', 
    failureRedirect: '/authentication', 
    failureFlash : true 
})); 

有誰知道爲什麼客戶端的功能在收到來自服務器的響應後沒有重定向?

謝謝!

回答

1

console.log(data)的輸出是什麼?

看起來服務器正在重定向,所以當前端代碼收到來自服務器的輸出時,它已經是successRedirect或failureRedirect頁面,因此您的代碼window.location.href = data.redirect未到達。檢查data,它應該有重定向屬性。如果沒有,我的猜測是服務器已經在做重定向,並且你沒有看到它,因爲你通過ajax調用它。這可以在Web檢查器的網絡選項卡中確認。

+0

數據實際上是應該重定向到的位置頁面的html源代碼。 –

+0

確認服務器正在重定向,讓我檢查護照lib文檔以瞭解如何返回json響應而不是重定向。通過這種方式,您可以通過ajax登錄並重定向自己 – Juank

+0

請查看http://passportjs.org/docs上的自定義回調部分。這樣你就可以從你的服務器返回一個json而不是一個重定向,就像'{redirect:'mySecurePageRoute'}'。現在在你的ajax響應中,你應該得到一個json對象,而不是一堆html – Juank