jQuery`enmit`方法忽略了使用GET的POST发送。为什么?

时间:2013-11-26 14:02:38

标签: javascript php jquery forms zend-framework

我有这样的表格。

<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/访问的网页生成,这也是表单指向的操作。

在服务器端,我区分GETPOST个请求。页面显示清晰(GET)或显示某些结果,具体取决于表单的值(POST)。

当我使用jQuery提交表单时(我不在这里使用AJAX,只需提交表单),就像在这个片段中一样,

$("#hiddenForm").submit();

然后jQuery似乎用GET提交此表单,尽管它已明确标记为与POST一起提交。即使alert($("#hiddenForm").attr("method"));总是会产生"post"。但是,仅当页面已由GET加载时,才会出现此不需要的行为。如果页面来自POST,即表单已至少提交一次,则所有内容都会按预期运行。

更新

问题是一个普通的preventDefault()问题。触发提交的按钮具有自己的功能。这是一个超链接。所以我有这一系列的行动。

  1. 超链接至https://[my-server]/my-controller/my-action/#
  2. 使用操作https://[my-server]/my-controller/my-action/提交表单。
  3. 当然,如果没有提交表单,则会导致GET来电。一旦我在页面https://[my-server]/my-controller/my-action/#上,超链接就失去了它的功能。这就是为什么第二次尝试总是有效的原因,因为行动链被简化为提交表格。

    1. 超链接到https://[my-server]/my-controller/my-action/# (因为已经没有效果)
    2. 使用操作https://[my-server]/my-controller/my-action/提交表单。
    3. 然后它当然有效。

1 个答案:

答案 0 :(得分:0)

正如评论中所讨论的,没有错误,至少在最后一个版本的jQuery 2.0.3上,可以用这个来测试:

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script>
$(document).ready(function () {
  $('#dosubmit').on('click',function(){
    $("#hiddenForm").submit();
  });
});
</script>
</head>
<body>

<?php
//
if(count($_GET) > 0) {
  echo "<textarea style=\"width: 700px; height: 90px;\">
Submitted with method=GET: \$_GET:
";
  var_dump($_GET);
  echo "</textarea>";
}

if(count($_POST) > 0) {
echo "<textarea style=\"width: 700px; height: 90px;\">
Submitted with method=POST: \$_POST:
";
  var_dump($_POST);
  echo "</textarea>";
}
?>

<form id="hiddenForm" method="post" enctype="multipart/form-data">
  <input type="hidden" id="HiddenFormInput" name="HiddenFormInput" />
</form>

<div id="dosubmit" style="background-color: gold; width: 200px; cursor: pointer;">Click me to Do jQuery Submit</div>

</body>
</html>

当点击黄金背景文字时,$(&#34;#hiddenForm&#34;)。submit();用于提交表格。

这是输出:

Submitted with method=POST: $_POST:
array(1) {
  ["HiddenFormInput"]=>
    string(0) ""
}

在原始格式中,提交不会传递任何URL参数,因为只提交了指定了name属性的输入。所以我添加了属性名称=&#34; HiddenFormInput &#34;为你的隐藏输入。