【问题标题】:A http 204 response returns a blank page in iOS, is there a way to stop this?http 204 响应在 iOS 中返回一个空白页面,有没有办法阻止这种情况?
【发布时间】:2018-12-23 09:22:46
【问题描述】:

以前可能有人问过这个问题,但我似乎找不到解决方案,如果是这种情况,我们深表歉意。

我有一个使用 express 的简单节点应用程序正在开发中。其中一个发布路由返回一个 http 204 并发送它,下面是我的代码:

router.post("/:id", function(req, res, next) {
  if (!req.session.userId) {
    res.status(204).send();
  } else {
    console.log(req.params.id);
    User.findById(req.session.userId, function (err, user) {
      if (err) return handleError(err); 

      const nameForDatabase = req.params.id + "Correct";  
      console.log(nameForDatabase);

      user.set({[nameForDatabase]: req.body.correct});

      user.save(function (err, updatedUser) {
        if (err) return handleError(err);
        console.log(updatedUser);
      });
    });

    res.status(204).send();
  }
});

在桌面 chrome 中,这与预期的一样,帖子更新用户数据,页面保持不变。在 iOS 中,会加载一个空白页面。

有没有办法阻止空白页出现在 iPhone/iPad 上?

提前非常感谢。

注意:https://simplenotesapp.herokuapp.com/fluids 是我要实现的目标的模型,重要的是 204 不会加载新页面,因为一旦用户回答了问题并在底部,出现正确答案。

【问题讨论】:

  • 仅供参考,您的代码编写方式可以调用res.status(204).send(),然后调用handleError(err)。我不知道handleError(err) 做了什么,但如果您希望它发送错误状态,那将无法正常工作。

标签: ios node.js http express http-status-codes


【解决方案1】:

在某些浏览器中,这似乎是一个众所周知的问题:

https://forums.developer.apple.com/thread/70226

https://bugs.chromium.org/p/chromium/issues/detail?id=368717

作为一种变通方法,您可以在网页中使用带有 Ajax 的 Javascript 来发布您的表单,而不是默认的表单发布,这样当前页面就不会受到任何影响。

只需将提交按钮连接到您的 Javascript 并执行 e.preventDefault() 以防止默认表单发布。然后您的 JS 可以在不影响当前页面的情况下发布表单。

【讨论】:

  • 谢谢,这就是我所做的,并且似乎运作良好。非常感谢您的宝贵时间!
  • @Ask - 如果这有助于您找出问题,那么您可以通过单击此答案左侧的复选标记向社区表明这一点。这也将为您在堆栈溢出时获得一些声誉积分,以遵循正确的程序。
猜你喜欢
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多