jQuery“submit”方法忽略使用GET的POST发送.为什么?
jQuery `submit` method ignores POST sends with GET. Why?
我有一个这样的表单。
<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,只是提交表单),就像这个片段中一样,
$("#hiddenForm").submit();
那么jQuery似乎用GET
提交了这个表单,尽管它清楚地标记为用POST
提交。即使是CCD_ 8也总是产生CCD_。但是,只有当页面已由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/
的表格
然后它当然起作用了。
正如评论中所讨论的,没有任何错误,至少在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>
当点击金色背景文本时,$("#hiddenForm").submit();用于提交表格。
这是输出:
Submitted with method=POST: $_POST:
array(1) {
["HiddenFormInput"]=>
string(0) ""
}
在原始表单中,提交时不会传递URL参数,因为只提交指定了name属性的输入。因此,我为您的隐藏输入添加了属性name="HiddenFormInput"。
- Adobe Captivate:在SCORM模块中使用GET/POST进行服务器端计算
- 仅GET/POST型号Sails.js的优势
- 与node.js的get/post混淆,并试图创建一个新页面
- 跳过Get/Post Ajax的FormsAuthenticationTicket过期
- 在继续之前,请确保异步GET/POST请求已完成
- Java HttpServlet 无法从 backbone.js获取 GET/POST
- 将JSON传递给服务器,如GET/POST以获取文件而不是ajax回复
- Node.js中的GET/POST函数
- 通过ajax将参数转换为get/post方法的phpxml
- 使用get/post的免费云数据存储
- 使用get/post请求登录帐户
- 我如何通过IE8中的GET/POST请求发送一个长JSON字符串
- JSON在WP中使用GET/POST方法(安全问题)
- 如何处理get/post在Express 4/nodejs从app.js传递数据从表单到新页面显示结果
- 如何使ajax get/post请求在快车服务器
- 如何使用jquery在表单中添加get/post方法
- Ajax在MVC模式下GET/POST/PUT/DELETE的区别
- AJAX请求使用的HTTP GET/POST方法
- Ext JS 3.4:如何在get post后获取表单's请求url
- 视频JS错误事件GET/POST