【问题标题】:POST form and prevent responsePOST 表单并阻止响应
【发布时间】:2012-10-15 21:01:53
【问题描述】:

我有以下表格:

<form method="post" action="http://domain.com/api.json?param=value"></form>

提交此表单后,我的文档将替换为来自http://domain.com/api.json 的回复。

是否可以发布此表单,但阻止接收响应,并使用form 保留现有 HTML?

【问题讨论】:

    标签: html forms post


    【解决方案1】:

    您可以只使用 AJAX(本例中为 XMLHttpRequest)来提交帖子

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "http://domain.com/api.json?param=value", true);
    xmlhttp.send(null);
    

    如果您需要,请提前准备。您可以获取参数值并对其进行编码:

    var val = encodeURIComponent(document.getElementById("param").value);
    

    那么第二行会更像:

    xmlhttp.open("POST", "http://domain.com/api.json?param="+val, true);
    

    否则,来自form 的任何形式的提交都会加载一个页面。一个技巧是将其放入隐藏的 iframe 中,并在完成后删除 iframe。

    【讨论】:

    • 对值进行编码的值(可能包括特殊字符)以使其可以安全地插入 URI,并且它在 URI 中而不是请求正文中发送数据(它属于POST 请求)。
    • “你可以只使用 AJAX 或 XMLHttpRequest”就像是在说“你可以开车或开车”。
    • @Quentin - 是的,我知道,但你可以开车,或者更具体地说,可以开车(不是卡车)。我只是这么说,因为我知道还有一种 jQuery 方法,它实际上使用 ajax 语法......所以,有两种方法。
    • @Quentin - 是的,同样,根据发送的数据和 OP 的要求,可能存在一些编码问题。但是,不改变服务器,我不知道另一种方式。
    【解决方案2】:

    发送 HTTP 204 No Content response 而不是通常的 200 OK 响应。

    10.2.5 204 无内容

    服务器已完成请求,但不需要返回 实体主体,并且可能想要返回更新的元信息。这 响应可能包括新的或更新的元信息,形式为 entity-headers,如果存在应该与 请求的变体。

    如果客户端是一个用户代理,它不应该改变它的文档视图 从导致发送请求的原因。这个回应是 主要目的是允许输入进行操作,而无需 导致用户代理的活动文档视图发生变化,尽管 任何新的或更新的元信息都应该应用于文档 当前在用户代理的活动视图中。

    204 响应不能包含消息体,因此总是 由标题字段后的第一个空行终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 2013-07-18
      • 1970-01-01
      • 2021-05-11
      相关资源
      最近更新 更多