【问题标题】:Res.redirect() loads as a fetch instead of redirecting? [duplicate]Res.redirect() 加载为 fetch 而不是重定向? [复制]
【发布时间】:2021-09-26 04:58:11
【问题描述】:

点击按钮点赞帖子后,我有一个简单的抓取:

function like(post_id){
    fetch(`/like/${post_id}`);
}

router.get('/like/:post_id/', authController.isLoggedIn, async (req, res, next) => {
  try {

    //liking

    req.flash("flash", 'You liked the post!');
    return res.redirect('back');
  }
  catch{
    req.flash("flash", 'Like failed :(');
    return res.redirect('back');
  }
});

理论上这应该做它的事情,然后重定向回与 Flash 消息相同的页面。

它没有这样做,而是将带有 fash 消息的页面加载为我从未调用过的获取请求!

它应该重新加载页面以行动/地形/...而不是侧面加载。我的问题是什么?我需要在重定向之前以某种方式结束提取吗?

【问题讨论】:

  • fetch() 调用本身不会更改浏览器中的页面,无论响应是什么,即使响应是重定向。他们只是尽职尽责地将重定向响应状态代码和标头返回到您的称为fetch() 的Javascript。由您的 Javascript 来处理该响应。浏览器不会对该响应自动执行任何操作。浏览器仅对来自浏览器提交的表单或浏览器提交的 URL 栏请求的响应进行操作。

标签: javascript node.js express fetch


【解决方案1】:

错误在于首先使用 fetch。这就是我让它工作的方式:

function like(post_id){
    document.body.innerHTML += `<form id="jsForm" action="/like/${post_id}" method="GET"><input type="hidden" name="a" value="a"></form>`;
    document.getElementById("jsForm").submit();
}

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多