【问题标题】:When should HTTP Form POST be preferred over Ajax?什么时候应该优先使用 HTTP Form POST 而不是 Ajax?
【发布时间】:2013-03-02 11:22:19
【问题描述】:

我最近开始使用 ajax。在此之前,我主要使用表单提交将数据发送到服务器。但是使用 ajax,我觉得在大多数情况下我们可以避免表单提交。即使在我们需要从一个页面转到另一个页面的情况下(例如,如果我想在单击表中的客户链接时查看特定客户的详细信息,我可以对服务器进行 ajax 调用并获取 html 响应并附加它在当前页面上,之前是通过表单提交处理的,这也有点慢)。

所以我想知道表单提交应该优先于 ajax 的地方吗?

【问题讨论】:

  • Ajax 仅在启用 Javascript 时可用。表单是纯 HTML。
  • 如果用户(出于某种原因)没有启用 JS,您可以使用 Ajax,然后提供表单提交作为后备。

标签: ajax web-applications http-post form-submit


【解决方案1】:

这实际上是一个非常广泛的问题,我会尝试更深入地回答它。

如果需要,使用常规 HTTP POST 代替 Ajax 有一些原因:

  1. HTTP POST 是 World 指定的 HTTP 1.1 标准的一部分 Wide Web Consortium (W3C) 因此有效 在任何符合 HTTP 1.1 的浏览器中。

  2. Ajax 需要 JavaScript 支持。即使如果你的用户的浏览器支持 JavaScript,不同的浏览器运行 JavaScript 使用 不同的引擎,您可能会遇到特定于浏览器的错误。

  3. Ajax 需要完全不同级别的错误处理。

    让我解释一下:当用户向您的服务器发送 POST 请求并发生一些错误(例如连接丢失)时,用户将在浏览器中收到一个完全可见的错误,因为浏览器本身将通知用户出现问题。当您使用 Ajax 时,您必须自己编写/实现所有这些错误处理。

    示例: 用户 A 正在访问您的博客并希望使用您在博客上实施的 Facebook OAUTH 发表评论。用户在评论字段中输入评论文本并按下评论按钮,结果如何? 什么都没有发生为什么?可能有很多原因,例如连接丢失、未处理的内容错误、服务器错误、兼容性错误、安全错误(如服务器证书丢失/无效、Facebook OAUTH 通信错误等)。

    对 HTTP POST 执行相同操作导致用户可见的错误。

更通用的 Ajax / JavaScript 问题

  1. 使用 HTTP 请求加载页面时,在加载页面时它在浏览器中可见。 Ajax 通常在页面加载之后加载,因此浏览器不会通知用户资源正在加载。

  2. 如果您使用 Ajax 加载资源(例如博客文章),它们将不会被 Google 索引,因为 Google 不运行 JavaScript。因此,更少的人会找到您的网站/内容。

  3. 无响应的响应式设计; Ajax 繁重的网站可能会占用大量 CPU 和网络流量,以至于加载页面实际上比使用普通的旧 HTML 所花费的时间要长很多

不幸的是,现代网站通常确实需要 JavaScript。那么,如何处理上述情况呢?

  1. 在适用的情况下使用正确的技术 (http://en.wikipedia.org/wiki/KISS_principle)

  2. 处理错误。

  3. 使用 Ajax 进行 POST 时,如果您预计服务器的响应时间超过一秒,请通过显示加载动画向用户提供“触觉反馈”。

  4. 不显眼的 JavaScript

    Unobtrusive JavaScript 允许未启用 JavaScript 的用户至少使用您网站上的基本功能。

    示例: 用户 A 使用非 JavaScript 浏览器进入您的博客并单击评论按钮。出现一个弹出窗口,用户 A 在其中输入她的评论并定期向服务器发帖,然后被重定向回您的博客帖子。 用户 B 使用支持 JavaScript 的浏览器进入您的博客。在您的博客文章下方,有一个评论字段和一个提交按钮。用户 B 输入她的评论并单击提交按钮,然后将 Ajax 请求发送到服务器。该页面会使用已发布的评论进行更新,并且无需重定向用户。

    基本上,通过始终加载常规的普通旧 HTML 页面,可以实现不显眼的 JavaScript。加载页面后,您运行 JavaScript 将您的 html 元素和链接替换为 JavaScript 锚点和元素。这样,不允许执行 JavaScript 的浏览器可以使用您的网站。

资源:

不显眼的 JavaScript

Ajax 错误处理

我希望这能回答你的问题!

【讨论】:

    【解决方案2】:

    大多数情况下,可以使用 Ajax。但请记住,这需要额外的实施努力。

    此外,在某些情况下仍需要表单:

    • 文件上传
    • 向其他服务器发送数据
    • 触发下载的表单

    【讨论】:

      【解决方案3】:

      两者没有太大区别。 我通常更喜欢 ajax 而不是常规形式。

      无论您选择哪种方法,重要的是如何使其安全。

      例如,如果您有一个网站,您可以在其中接受帖子形式的数据。我可以制作一个表格并将数千行代码发布到您的网站,您的网站会接受,因为您不知道数据来自哪里。示例是您网站中的注册页面。

      如果您将表单中的 md5 哈希发送到用户浏览器并将其保存在会话中会更好。因此,当用户提交表单时,他/她会将哈希发送回您的服务器,您可以在那里检查保存的会话值。然后您就会知道这是您的网站,而不是来自第三方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-15
        • 2012-07-01
        • 1970-01-01
        • 2011-06-22
        • 2015-12-11
        相关资源
        最近更新 更多