jQuery`enmit`方法忽略了使用GET的POST发送。 为什么?
我有这样的表格。
这是由可通过https://[my-server]/my-controller/my-action/
访问的网页生成的,这也是表单指向的操作。
在服务器端,我区分GET
和POST
请求。 页面显示( GET
)或显示一些结果,具体取决于表单的值( POST
)。
当我使用jQuery提交表单时(我在这里不使用AJAX,只需提交表单),就像在这个片段中一样,
$("#hiddenForm").submit();
然后jQuery似乎用GET
提交这个表单,虽然它明确标记为使用POST
提交。 甚至是alert($("#hiddenForm").attr("method"));
总是产生"post"
。 但是,如果页面已由GET
加载,则仅会发生此不需要的行为。 如果页面是通过POST
,即表单已经提交了至少一次,那么一切都按预期进行。
更新
问题是一个简单的旧的preventDefault()
。 触发提交的按钮具有自己的function。 这是一个超链接。 所以我有这一系列的行动。
- 超链接到
https://[my-server]/my-controller/my-action/#
- 使用操作
https://[my-server]/my-controller/my-action/
提交表单。
当然,如果没有提交表单,这将导致GET
调用。 一旦我在页面上https://[my-server]/my-controller/my-action/#
,超链接就失去了它的function。 这就是为什么第二次尝试总是有效的原因,因为行动链被简化为提交表格。
-
超链接到(没有效果,因为已经存在)https://[my-server]/my-controller/my-action/#
- 使用操作
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 ”。