HTML表单使用GET而不是POST发送数据

10

非常奇怪,但我的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表单非常简单,我只编写了一小部分代码示例。
如何修复它?
谢谢!

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

当我在本地机器上运行我的Web应用程序和静态站点时-它可以正常工作。 但是当我在本地机器上运行静态页面并在服务器上运行mvc时,它无法工作。

P.P.S.-这个表单的变体是原始的(我剪切了一些标签)。 现在它还是原来的样子。

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


1
除非你正在使用JavaScript进行动态操作,否则应该使用POST方法。(此外,请确保包含有效的HTML - 在这种情况下至少缺少表单关闭标记;一个fiddle测试用例可以更好地重现所声称的行为。) - user2864740
你是否定义了 hide() 函数? - Bhavesh Kachhadiya
我认为hide()函数中的某些内容会阻止页面提交。 - Bhavesh Kachhadiya
hide()函数已定义(我不知道在哪里),但当hide()运行时,窗体关闭。 - Admiral Land
这是否类似于这个问题(我在您的示例中看到您缺少</form>):http://stackoverflow.com/questions/8653893/views-always-doing-an-http-get-instead-of-a-post-on-submit - acarlon
当您在本地运行服务器时,页面有何不同之处与在服务器上运行时相比?您能将此精确代码片段粘贴到文件中并在浏览器中打开吗?您会得到一个POST还是GET? - acarlon
8个回答

25

这个问题相当普遍,但答案却很难找:

在您的代码中,有一个孤立的<form>。这意味着下一个表单嵌套在前一个表单中,它的方法被忽略。删除或关闭多余的<form>就可以解决问题。


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

@AdmiralLand 我忘记了我是如何得到类似的难题的。我的尝试复现显示了一种人为制造的情况,其中一个 Flask 服务器路由以斜线结尾,接受 GET 和 POST 请求,并且客户端发送不带斜线的 POST 请求。 - eel ghEEz

5

如果您在示例中只是忘记了关闭标签,那么应该是一个发布。我将您的代码添加到一个html文件中,并提交到Chrome中。这是我在网络跟踪中看到的:

输入图像描述

此外,请查看此问题,以防您正在做同样的事情。


我同意“应该是一个帖子”的观点。我相信原帖作者在隐藏某些东西(甚至在hide中)。 - user2864740
@user2864740 - 我同意,就是这样的。 - acarlon

1

我曾经遇到过同样的问题,这是我所做的: 当一个表单嵌套在另一个表单中时,它的方法被忽略,这就是问题首先出现的原因。

解决方案非常简单: 删除或关闭多余的表单即可。


1

这篇文章 帮助我解决了问题。

如果IIS管理器重定向url,则会将POST请求更改为GET请求。 我必须将服务器更改为重写url而不是重定向它。

我还必须在IIS管理器中启用应用程序请求路由。 我按照这篇文章中的说明操作。


0

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

请尝试:

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

3
不,不是这样的。在简单的HTML属性值周围加引号并不重要。这已经是第三次建议了 :) 请参见http://www.w3.org/TR/html-markup/syntax.html#syntax-attributes。 - user2864740
文档类型未指定,我也不可能合理地假设文档类型被正确应用。 - Rushyo
文档类型在这种情况下基本上是无关紧要的。它肯定不是XHTML代码,唯一合理的选择是将其视为HTML5/4 - 这仅仅是DOM从标记创建的方式,与各种“模式”无关。(更不用说UA被声称为IE10了。) - user2864740
1
你的所有评论都与我的观点无关或未能反驳我的主张。这个答案是错误的。 - user2864740
答案可能是错误的,但考虑到所提供的有限事实,这并不是一个不合理的建议。你把一堆事实归因于 OP 从未说过的话,这只会让你显得自以为是。 - Rushyo
显示剩余3条评论

0

在我的情况下,我发现了一些原因。

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

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

  2. 以错误的方式编写帖子。即应该像这样:

    <form action="index.php" method="post">

如果您编写 method=postmethod ="POST"method ="Post",则它将无法正常工作。 希望这能解决您的问题。


0
尝试使用method="post"而不是method=post

4
没关系。在简单的 HTML 属性值周围使用引号是可选的。请参见 http://www.w3.org/TR/html-markup/syntax.html#syntax-attributes。 - user2864740

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接