【发布时间】:2013-11-26 14:02:38
【问题描述】:
我有一个这样的表格。
<form id="hiddenForm" method="post" action="/my-controller/my-action/" enctype="multipart/form-data">
<input type="hidden" id="HiddenFormInput" name="HiddenFormInput">
</form>
它由通过https://[my-server]/my-controller/my-action/ 访问的网页生成,这也是表单指向的操作。
在服务器端,我区分了GET 和POST 请求。页面要么简单地显示(GET),要么根据表单的值显示一些结果(POST)。
当我使用jQuery提交表单时(我这里没有使用AJAX,只是提交表单),就像这个sn-p一样,
$("#hiddenForm").submit();
然后 jQuery 似乎使用GET 提交此表单,尽管它明确标记为使用POST 提交。即使alert($("#hiddenForm").attr("method")); 总是产生"post"。但是,仅当页面已由 GET 加载时,才会发生这种不需要的行为。如果页面来自POST,即该表单已至少提交一次,则一切正常。
更新
问题出在一个普通的旧preventDefault() 上。触发提交的按钮有它自己的功能。这是一个超链接。所以我有这一系列的动作。
- 超链接到
https://[my-server]/my-controller/my-action/# - 提交带有操作
https://[my-server]/my-controller/my-action/的表单。
当然,这会导致在没有提交表单的情况下调用GET。一旦我在页面https://[my-server]/my-controller/my-action/# 上,超链接就失去了它的功能。这就是为什么第二次尝试总是有效的原因,因为操作链被简化为提交表单。
-
指向(无效,因为已经存在)https://[my-server]/my-controller/my-action/#的超链接 - 提交带有操作
https://[my-server]/my-controller/my-action/的表单。
然后它当然起作用了。
【问题讨论】:
-
document.getElementById("hiddenForm").submit();是做什么的? -
你怎么知道页面是使用
GET方法提交的? -
您是否尝试在表单中添加
<input type="submit" />元素? -
我测试了一下,jQuery使用的提交方法“POST”。
-
感谢
preventDefault(),我也遇到过,需要咖啡。 :)
标签: javascript php jquery forms zend-framework