2014-04-26 69 views
1

問題我有一個按鈕,通過做一個AJAX POST請求,我想刷新頁面,當它完成。用Node.js的(快遞)res.redirect

所以,我的AJAX做一個POST到/upgrade

app.post("/upgrade", game.upgrade);

exports.upgrade = function(req,res){ 
    player.findOne({name:req.session.name}, function(err, doc){ 
     //doing something 
     doc.save(function(err){ 
      if(err) console.log(err); 
      else res.redirect("/game/buildings"); 
     }); 
    }); 
} 

正如你所看到的,redirect/game/buildings

app.get('/game/buildings', game.buildings);

export.buildings = function(req,res){ 
    playerDB.findOne({name:req.session.name}, function(err, doc){ 
     //doing something 
     res.render('./game/buildings', {username:req.session.name}); 
    } 
} 

釷E題是res.redirect在升級方法的工作,但在buldings處理程序,則res.render似乎被忽略。

我加了一個console.log("session: "+req.session.name)buildings方法裏面,它的確定。所有數據似乎都沒問題,但res.render不起作用。

在控制檯日誌,當我使用菜單(這種方式工作得很好)轉到/game/buildings路徑,它打印是這樣的:

routing to buildings 
session: Neoares 
[90mGET /game/buildings [32m200 [90m48ms - 6.58kb[0m 
[90mGET /javascripts/jquery.js [36m304 [90m0ms[0m 
[90mGET /javascripts/game.js [36m304 [90m1ms[0m 
[90mGET /stylesheets/bootstrap.min.css [36m304 [90m1ms[0m 
[90mGET /stylesheets/justified-nav.css [36m304 [90m1ms[0m 
[90mGET /images/buildings/wishing_well.svg [36m304 [90m1ms[0m 
[90mGET /images/resources/wood.png [36m304 [90m1ms[0m 
[90mGET /images/resources/stone.png [36m304 [90m2ms[0m 
[90mGET /images/resources/iron.png [36m304 [90m1ms[0m 

但是當我通過AJAX按鈕去,只打印此:

routing to buildings 
session: Neoares 
[90mGET /game/buildings [32m200 [90m98ms - 6.58kb[0m 
+0

是您快速的應用程序設置你的意見設置?如果是這樣,他們的目標是什麼? – mscdex

+0

我想你的意思是:'app.set('views',path.join(__ dirname,'views'));'。是嗎? – Neoares

回答

8

AJAX和重定向不兼容。按照定義,AJAX在與瀏覽器在地址欄中加載的URL不同的上下文中與服務器進行交互。因此,做一個AJAX請求,然後用重定向響應並不會自動影響瀏覽器的window.location,因此發送重定向到AJAX請求幾乎總是一個錯誤。你可以做的只是在瀏覽器中使用javascript來設置window.location到正確的路徑,如果你的POST成功到/upgrade