【问题标题】:POST versus Ajax callPOST 与 Ajax 调用
【发布时间】:2009-01-23 14:20:41
【问题描述】:

现在大多数现代浏览器都支持 AJAX 和客户端请求而不执行 POST,那么 POST(表单发布)的作用是什么?

是否存在 POST 总是优于 XmlHttpRequest 的情况或一般规则?

POST 所做的只是将可变键值对放在服务器头部。 POST的优势我能想到的就是数据量大,手机浏览器多。还有很多我想念的吗?

注意我知道您可以使用 AJAX 调用执行 POST,我主要是在谈论使用 <form> 标记

【问题讨论】:

    标签: ajax


    【解决方案1】:

    这个问题有点棘手,因为它混淆了两个概念。第一个是 POST,第二个是 Ajax。与 GETting 相比,POSTing 是一种不同的 HTTP 方法,具有不同的实现和语义。 Ajax 或 XmlHttpRequest 在正常的请求/导航中具有对应的功能。您可以将 POST 或 GET 用于 XmlHttpRequest 以及普通导航和表单提交(嗯,POST 始终是“表单提交”)。 XmlHttpRequest 与普通请求的区别在于,普通请求将页面替换为新页面。

    您几乎可以编写任何仅使用 Ajax 来获取数据和更改 DOM 的网站;这主要是 Gmail 的工作原理。没有传统意义上的“表单提交”。但是仍然存在 GET 和 POST,因为服务器和浏览器对结果的解释不同。 GET 应该是幂等的; POST 用于更改服务器状态的操作。例如,一个电子商务交易应该是一个 POST。这在使用 Ajax 时不会改变,因为您希望代理服务器也知道这是一个 POST 并且它们不应该尝试缓存响应。

    使用 GET 与 POST 也有优点和缺点。您不能为 POST 的结果添加书签,因为参数是隐藏的。您无法获取具有无限长度参数值的内容,因为 IE 仅支持大约 2000 个字符。

    相对于普通提交,使用 Ajax 也有缺点;您不能为结果页面添加书签(因为页面没有更改);后退按钮无法按预期工作。但是使用 Ajax,您可以最大限度地减少传输的数据,还可以方便地更新页面(例如监控长时间进程的状态),而不会出现烦人的闪烁或刷新。

    总的来说,Ajax 和传统表单提交这两种请求类型都可以与 GET 和 POST 一起使用,并且各有利弊。两种类型都无法做到其他类型可以做到的一切,因此您可以期待在可预见的未来看到混合型。

    【讨论】:

      【解决方案2】:

      由于安全限制,某些操作无法使用 AJAX 请求执行。例如,上传文件不能用 AJAX 完成。

      【讨论】:

      • jQuery 将自动在内部创建一个 iframe,并在 iframe 中创建一个表单,如果它在 Ajax 请求中检测到文件上传,则 POST 该表单。
      【解决方案3】:

      如果您需要刷新整个页面,发帖可能会更容易。

      【讨论】:

        【解决方案4】:

        主要区别在于表单的 POST 发送数据,并且可以在与服务器的单次往返中导航到新的 URL。 Ajax 可以发送数据但不能导航到新页面。

        【讨论】:

        • 调用成功后不能使用window.location.href=xx吗?
        • @Chris,触发 GET,这将是服务器的第二次往返。
        • @James 通常,一个好的做法是任何非 ajax POST 都应该以重定向结束。这样做是为了避免在重新加载页面时重新提交表单。如果遵循此良好做法,则无论如何重定向都是到服务器的第二次往返。
        【解决方案5】:

        呃..张贴表格?

        Post 非常适合大型表单,因为值隐藏在 html 标头中而不是附加到 url 字符串上?

        【讨论】:

        • 您可以将 SOAP 用于 Ajax
        【解决方案6】:

        如果理论上,HTTP GET 应该是对信息的幂等请求:两个相同的 GET 应该返回完全相同的信息。

        另一方面,HTTP POST 旨在保持状态并执行操作:两个相同的 POST 可能会执行不同的操作,具体取决于执行操作的人员、之前执行的操作以及执行时间。

        【讨论】:

          【解决方案7】:

          我将使用 this video 回答我自己的问题,我最近偶然发现了 Doug Crockford。他描述了所有 ajax 和所有页面刷新之间的跷跷板。

          【讨论】:

            猜你喜欢
            • 2011-11-23
            • 1970-01-01
            • 2020-07-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-29
            • 2012-12-06
            相关资源
            最近更新 更多