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

我有这样的表格。

这是由可通过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() 。 触发提交的按钮具有自己的function。 这是一个超链接。 所以我有这一系列的行动。

  1. 超链接到https://[my-server]/my-controller/my-action/#
  2. 使用操作https://[my-server]/my-controller/my-action/提交表单。

当然,如果没有提交表单,这将导致GET调用。 一旦我在页面上https://[my-server]/my-controller/my-action/# ,超链接就失去了它的function。 这就是为什么第二次尝试总是有效的原因,因为行动链被简化为提交表格。

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

然后它当然有效。

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

        0) { echo ""; } if(count($_POST) > 0) { echo ""; } ?> 
Click me to Do jQuery Submit

当点击黄金背景文本时,$(“#hiddenForm”)。submit(); 用于提交表单。

这是输出:

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

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