我有一个通过AJAX执行POST请求的按钮,我希望在完成后刷新页面.
所以,我的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");
});
});
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,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});
}
}
Run Code Online (Sandbox Code Playgroud)
问题是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
Run Code Online (Sandbox Code Playgroud)
但是当我通过AJAX按钮时,它只会打印出来:
routing to buildings
session: Neoares
[90mGET /game/buildings [32m200 [90m98ms - 6.58kb[0m
Run Code Online (Sandbox Code Playgroud)
AJAX和重定向不兼容.根据定义,AJAX在一个单独的上下文中与服务器交互,浏览器在地址栏中加载了该URL.因此,执行AJAX请求然后使用重定向进行响应不会自动影响浏览器window.location,因此将重定向发送到AJAX请求几乎总是错误的.window.location如果您的POST /upgrade成功,您可以在浏览器中使用javascript设置正确的路径.
| 归档时间: |
|
| 查看次数: |
3493 次 |
| 最近记录: |