我有一个通过AJAX执行POST请求的按钮,我希望在完成后刷新页面。
所以,我的AJAX对/upgrade
进行了POST:
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});
}
}
问题是升级方法中的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 :(得分:8)
AJAX和重定向不兼容。根据定义,AJAX在一个单独的上下文中与服务器交互,浏览器在地址栏中加载了该URL。因此,执行AJAX请求然后使用重定向进行响应不会自动影响浏览器的window.location
,因此将重定向发送到AJAX请求几乎总是错误的。您可以做的只是在浏览器中使用javascript将window.location
设置为正确的路径,如果您对/upgrade
的POST成功。