HTTP 204响应在iOS中返回空白页,是否可以阻止此问题?

时间:2018-07-15 19:20:54

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

这可能以前曾被问过,但我似乎找不到解决方案,因此,如果是这种情况,我们深表歉意。

我在开发中有一个使用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上?

非常感谢。

NB:https://simplenotesapp.herokuapp.com/fluids是我想要的模拟,重要的是204不要加载新页面,因为一旦用户回答问题并提交问题,您将看到204在底部,将显示正确的答案。

1 个答案:

答案 0 :(得分:1)

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

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

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

作为一种解决方法,您可以在网页中使用一点Javascript和Ajax来发布表单,而不是使用默认的表单发布,然后当前页面完全不会受到影响。

只需将提交按钮挂接到Javascript上,然后执行e.preventDefault()即可阻止默认表单发布。然后,您的JS可以发布表单,而不会影响当前页面。