【问题标题】:Responding so the browser does not do anything - is it possible?响应所以浏览器不做任何事情 - 有可能吗?
【发布时间】:2009-03-17 15:05:17
【问题描述】:

是否可以做出这样的 HTTP 响应,让浏览器忽略它并继续显示之前显示的页面?

我的意思是以下场景:

a) 用户点击某物

b) 一些 POST 发送到服务器(或 GET,但让我们坚持使用 POST 更有趣)

c) 服务器出于某种原因决定此时不想发送回复

d) 服务器发送特制的响应

e) 浏览器不显示错误页面,不显示空白页面,不重定向到任何地方,不重新加载 - 只是继续显示它所显示的内容,就好像用户从未提交过表单一样

PS 当然可以用 AJAX 包裹,但我问是否可以使用准系统非 javascript 解决方案

【问题讨论】:

    标签: http browser response


    【解决方案1】:

    尝试返回 HTTP 204 No Content。请参阅RFC 2616 (Hypertext Transfer Protocol -- HTTP/1.1 ) 中此响应代码的描述,其中显示:

    如果客户端是一个用户代理,它不应该改变它的文档视图 这导致请求被发送。此响应主要是为了让 在不改变用户代理的活动的情况下进行操作的输入 文档视图,尽管任何新的或更新的元信息都应该应用于 当前在用户代理的活动视图中的文档。

    【讨论】:

    • 谢谢,这就是我要找的。​​span>
    【解决方案2】:

    这是一种通常称为AJAX 的方法。它需要JavascriptXMLHttpRequest 函数。

    编辑:注意到底部的“PS”。另一个答案中建议的204 response 看起来可能是一个有效的非Javascript 解决方案。

    【讨论】:

      【解决方案3】:

      假设你这样做。

      用户做什么?当然,请再次提交表单。

      好几次。

      然后他们认为您的网站已损坏,然后离开。

      【讨论】:

      • 我很好奇。为什么您不想提供任何反馈?在这种情况下隐藏/灰显提交按钮不是更好吗?对用户隐藏进程有什么好处,除非你做的不好......嗯。
      【解决方案4】:

      我认为您需要 Javascript 来执行此操作,您可以发送请求,并且根据服务器响应,Javascript 可以返回 false,避免刷新/重新加载实际页面。

      我不知道 204 响应,但也许你可以从服务器端这样做。

      另一种方法(也是 Javascript)是在发送请求后立即返回 false,并且根据服务器响应(使用 ajax),您可以修改实际页面或将用户发送到另一个页面。

      【讨论】:

        【解决方案5】:

        没有。 HTTP 协议由一个请求-响应周期组成。服务器无法决定不回复(可以,但它会破坏协议并提交错误)。

        【讨论】:

        • 但是,有一个已定义的 HTTP 响应代码告诉浏览器更新或更改当前显示的内容。
        猜你喜欢
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 2017-01-04
        • 2020-06-25
        • 1970-01-01
        • 2011-02-02
        • 2019-03-11
        • 1970-01-01
        相关资源
        最近更新 更多