【问题标题】:Send both POST and GET in a form以表单形式发送 POST 和 GET
【发布时间】:2011-06-11 05:45:34
【问题描述】:

我需要让表单同时发送 POST 和 GET 请求(由于 IE 和 iframe 中的一些错误),你怎么做?

发送的数据不是超级安全的,所以它是否可以通过 GET 设置并不重要,只需要确保它是双向设置的。

感谢您的帮助!

【问题讨论】:

  • 以下几个答案显示了如何可以做到这一点。请记住,请求本身只有一个类型,即<form>method。因此,您可以在POST 请求中添加“GET-style”参数,但不能相反。
  • 我真的很想知道你为什么要这样做。我想不出任何理由。此外,通过 POST 发送的数据并不比通过 GET 发送更安全。无论哪种方式,它都是以明文形式发送的。如果您需要安全性,则必须使用 SSL。
  • @Brad 出于某种原因,它仅适用于 chrome 和 ff 用户的 POST,并且仅适用于 IE 用户的 GET
  • 什么作用?你能给我们一些HTML来看看吗?我们不知道你指的是什么。 POST 和 GET 是非常基础的,应该可以在任何浏览器上运行。如果不是,我怀疑你的问题是别的。
  • 在 iframe 中嵌入了一个表单,特别是 Facebook 应用程序 iframe。我不知道为什么,但是 POST 不适用于 IE 用户,而 GET 不适用于 chrome 或 ff。

标签: php html http-post http-get


【解决方案1】:

简单:只需在表单 URL 中指定 GET 数据。

<form method="POST" action="form.php?a=1&b=2&c=3">

但是,请非常仔细地检查数据在接收脚本中的使用方式。不要使用$_REQUEST——而是根据您的确切需求和您需要它们的优先顺序来解析$_GET$_POST

【讨论】:

  • 你误会了。我的意思是我希望数据同时以POSTGET 的形式提交,而不是通过额外的GET data
  • @Cyclone 啊,我明白了。那么这只能使用像@casablanca 节目这样的JS。
  • 不要忘记将方法设置为 POST。如果您将其保留为 GET,则操作中的参数将被删除...
【解决方案2】:

表单应该设置post在url中获取

<form method="post" action="http://www.yourpage.php?firstparam=1&sec=2">
.
.
</form>

【讨论】:

    【解决方案3】:

    让表单做一个普通的 POST 并使用 JavaScript 来复制查询字符串中的值:

    HTML:

    <form id="myform" method="post" action="..." onsubmit="process()">
      ...
    </form>
    

    JavaScript:

    function process() {
      var form = document.getElementById('myform');
      var elements = form.elements;
      var values = [];
    
      for (var i = 0; i < elements.length; i++)
        values.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(elements[i].value));
    
      form.action += '?' + values.join('&');
    }
    

    【讨论】:

    • 唯一的出路。请注意 GET 参数的 2-4 KB 限制
    【解决方案4】:

    不确定您要解决什么错误,但您可以使用 jQuery 轻松修改表单的操作以包含发布的值:

    脚本:

    function setAction() {
        $("#myform").attr("action", "/path/to/script/?" + $("#myform").serialize());
    }
    

    html:

    <form id="myform" action="/path/to/script/" method="post" onsubmit="setAction()">
    

    【讨论】:

    • 我唯一要添加的是 .preventDefault() 到事件中。然后调用表单提交按钮的click()。这样在 js 完成它的事情之前无法发送表单。
    • @Robert:绝对可以进行调整。我只是想展示为此目的使用 jQuery 的一般概念。
    【解决方案5】:

    如果您需要动态创建的 URL。您可以使用此 HTML 示例。 GET 字段采用单独的形式。在提交 POST 表单之前,URL 是从 GET 表单生成的。

    <form id="formGET">
        email: <input name="email" value="email@domain.nl"/>
    </form>
    <form id="formPOST" method="post" onsubmit="this.action='/api/Account?'+Array.prototype.slice.call(formGET.elements).map(function(val){return val.name + '=' + val.value}).join('&');">
        mobile: <input name="mobile" value="9999999999" /><br />
        <button>POST</button>
    </form>
    

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2011-06-02
      • 2012-06-25
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多