【问题标题】:HTML form send data by GET instead POSTHTML 表单通过 GET 而不是 POST 发送数据
【发布时间】:2014-01-21 11:14:54
【问题描述】:

这很奇怪,但我的 HTML 表单通过 GET 发送数据,而不是 POST。

    <form name="mistake" action="http://web-server.com:8888/WebApp/Email/Create" method=post>
  <input type="text" name="url" size="50" readonly="readonly">
          <br />
          <span class="text">
          Error :
          </span>
          <br /> 
          <textarea rows="5" name="mis" cols="37" readonly="readonly"></textarea> 
          <br />
          <span class="text">
          Comment :
          </span>
          <br /> 
          <textarea rows="5" name="comment" cols="37"></textarea> 
          
          <input type="hidden" name="email" value="admin@admin.com">
          <input type="hidden" name="subject" value="Errors">
          <div style="margin-top: 7px"><input type="submit" value="Submit">
          <input onclick="hide()" type="button" value="Close" id="close" name="close"> 
          </div>
</form> 

我在 IE10 上使用标准选项对其进行测试。
HTML 表单非常简单,我只编写了很少的代码示例。
如何解决?
谢谢!

附:更改网址。此 URL web-server.com:8888/WebApp/Email/Create - 属于 asp mvc 应用程序。

当我在本地机器上运行我的网络应用程序和静态站点时,它可以工作。 但是当我在本地机器上运行静态页面和在服务器上运行 mvc 时,它不起作用。

P.P.S.-这种形式的变体-是原始的(我剪掉了一些标签)。现在它是原始的。

我不知道为什么,但它有效。可能是 - 服务器端的问题?

【问题讨论】:

  • 除非你用 JavaScript 做一些动态的事情,否则它应该使用 POST。 (另外,请确保包含有效的 HTML - 在这种情况下,至少缺少表单结束标记;并且小提琴测试用例在重现声称的行为方面有很长的路要走。)
  • 你是否定义了hide()函数。
  • 我认为hide() 函数中的某些内容可以避免页面发布。
  • hide() 函数定义(我不知道在哪里,但是当 hide() 运行时 - 窗体关闭。
  • 是不是类似于这个问题(我在你的例子中看到你错过了):stackoverflow.com/questions/8653893/…

标签: html post get


【解决方案1】:

这个问题相当普遍,答案却相当难以捉摸:

在您的代码中某处有一个孤立的&lt;form&gt;。这意味着下一个表单嵌套在前一个表单中,并且其方法被忽略。删除或关闭多余的&lt;form&gt;就完成了。

【讨论】:

    【解决方案2】:

    它应该是一个帖子(假设您只在示例中忘记了结束标签)。我添加了您的代码并将结束标记放在一个 html 文件中并在 Chrome 中提交。这是我在网络跟踪中看到的:

    如果您也这样做,请查看this question

    【讨论】:

    • 我同意“应该是一个帖子”。我相信 OP 隐藏了一些东西(甚至在 hide 中)。
    • @user2864740 - 同意,就是这样。
    【解决方案3】:

    我使用的 Web 应用程序框架会自动将操作 URL 的 POST 请求重定向到带有尾部斜杠的相同 URL。 HTTP 重定向将 POST 降级为 GET。

    【讨论】:

    • @AdmiralLand 我忘记了我是如何得到类似的谜题的。我试图重现在一个人为的示例中显示了重定向,其中烧瓶服务器路由以斜杠结尾,接受 GET 和 POST,并且客户端发送不带斜杠的 POST 请求。
    【解决方案4】:

    试试 method="post" 而不是 method=post

    【讨论】:

    【解决方案5】:

    在这里我确实遇到了同样的问题: 当一个表单嵌套在另一个表单中时,问题首先出现,并且它的方法被忽略了。

    解决方案非常简单: 删除或关闭多余的就可以了。

    【讨论】:

      【解决方案6】:

      This post 帮助我解决了问题所在。

      如果 IIS 管理器重定向 url,它会将 POST 请求更改为 GET 请求。 我不得不将服务器更改为 re-write url 而不是 redirect 它。

      我还必须在 IIS 管理器中启用 应用程序请求路由。 我按照this post中的说明进行操作。

      【讨论】:

        【解决方案7】:

        (就我而言,我找到了一些原因。)

        可能有很多原因,其中两个是:

        1. 如果忘记关闭表单标签。

        2. 以错误的方式撰写帖子。即它应该是这样的:

          &lt;form action="index.php" method="post"&gt;

        如果你写 method=postmethod ="POST"method ="Post" 那么它将不起作用。 希望它能解决你的问题。

        【讨论】:

          【解决方案8】:

          可能只是您的用户代理忽略了表单方法,因为您没有在属性周围加上引号。

          试试:

           <form name="mistake" action="http://web-server:8888/WebApp/Email/Create" method="post">
          

          【讨论】:

          • 不,不是。引号与简单的 HTML 属性值无关。这是建议的第三次 :) 见w3.org/TR/html-markup/syntax.html#syntax-attributes
          • 这取决于用户代理和 HTML 的形式。这不是“给定的”。
          • UA 是 IE10。任何不接受简单(不带引号)属性值的 UA not 是一个正常运行的 HTML4/5 UA - 甚至 IE6 也能理解这种语法(为了向后兼容性而保留/编码,而不是作为一个很酷的 HTML5 添加特征)。 XHTML 不是 HTML。
          • 没有指定文档类型,我也不认为文档类型被正确应用。
          • 您的所有 cmets 都与我的说法无关或反驳我的说法。这个答案是错误的。
          猜你喜欢
          • 2016-10-20
          • 2019-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-11
          • 2021-10-12
          • 2013-03-06
          相关资源
          最近更新 更多