【问题标题】:When will XHR revert to GET requests?XHR 何时恢复为 GET 请求?
【发布时间】:2016-06-24 03:37:19
【问题描述】:

我在服务器上运行了一个 Meteor 1.2 应用程序(使用 nginx 作为代理),由于各种原因,它不支持 DDP。在这种情况下,应用程序回退到 XHR 轮询并按预期工作。我还使用环境变量 DISABLE_WEBSOCKETS=1 实时部署它以完全禁用 websockets,我可以使用 Chrome 的网络选项卡进行验证。

我收到了一些关于我无法重现的零星问题的错误报告。

看起来在某些情况下,表单提交不使用 POST,而是恢复为 GET(即,我可以在 URL 中看到所有表单数据)并且表单根本不提交。

Meteor 中的 XHR 在什么情况下可以从 POST 恢复为 GET?不幸的是,我无法重现这一点,也没有在日志中看到任何表明存在问题的内容。

【问题讨论】:

  • 如何提交表单?你能分享那个代码吗?
  • 你使用 jQuery 作为 xhr 吗?在这种情况下,您在用户提交表单时使用 $.post 吗?像@christianFritz,我们需要表单的html代码,以及管理提交/发布的js
  • @ChristianFritz 这是一个 MeteorJS AutoForm,就像 Meteor 一样,如果由框架本身处理,组件之间的管道。我会看看我是否可以提取任何有意义的代码。
  • @Rebolon 这是一个 Meteor 应用程序,因此由框架通过 Autoforms 提供。 IIRC,Metor 的 DDP 层建立在 WebSockets 之上;如果 WS 不可用(比如我的情况),则使用 SockJS 进行仿真。
  • 1.检查 Meteor 是否仍然支持用户的浏览器(有些人只是坚持使用 IE 6)。 2. 检查是否有任何用户脚本或浏览器扩展(想想 AdBlocker)可能以任何方式破坏您的代码。

标签: meteor xmlhttprequest


【解决方案1】:

您似乎没有查看失败表单请求的实际标头,这可能意味着您假设该请求是 GET。如果我错了,请纠正我。如果您看不到标头,请添加一些区分 POST 和 GET 的自定义日志记录,以便您澄清它实际上是 GET。

我认为帖子以某种方式失败,您错过了错误捕获。尝试进入处理表单帖子的服务器上的逻辑,并创建一些 try catch 博客并进行一些自定义日志记录。这可能会暴露您可能缺少服务器端的错误。此外,请确保您在数据库中启用了日志记录。您可能丢失的数据库中可能发生错误。如果这不起作用,至少你会有更好的错误监控设置!

【讨论】:

  • 我看到所有表单参数都通过 URL 传递,这就是为什么我假设这是一个 GET 而不是一个 POST,但你是对的,我没有查看实际的标题.我无法重现该问题,这就是为什么这很难调试。我也对此投了反对票,因为这个问题有赏金,这是在赏金之后添加的,我认为这不是自动奖励的好答案。
  • 明白。调试可能很困难,因为您可能没有适当的调试机制。这就是为什么我的建议是添加一些异常捕获块并监视数据库日志记录以确保异常不会导致问题。 Meteor 发送 POST 与 GET 的基础只有在您知道它实际上是 POST 时才成立。你说你在假设是什么让你走上了错误的道路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多