如何解决为什么序列化不包含提交按钮名称? [重复]
| 这个问题已经在这里有了答案:解决方法
不确定这是否是最优雅的解决方案,但是您可以使用隐藏的输入框来包含一个值(最好是发生变化的值,例如某种哈希),然后进行检查。喜欢:
<input type=\"hidden\" name=\"signup_submitted\" value=\"random_hash\" />
在您的代码中,您可以执行以下操作:
if(isset($_POST[\'signup_submitted\']))
{
// Do your work;
}
警告:这里的哈希值不是安全的事情,而只是做与您习惯相同的事情的一种方法。
小更新:我注意到您还问过“为什么”,jQuery在serialize()
输出中不包含“提交”按钮。这是HTML草案中指定的默认行为。只要没有按下提交按钮,就不应将其包含在已提交(或序列化)的数据中。 JQuery创建者决定尊重这一点,并且不将其包括在序列化字符串中。
, 类型为“ submit”的“ 3”标签的“ value”属性用于确定标签-提交按钮的标签。它不是要发送的。
您要求的替代解决方案可能是类型为“ hidden”的“ 3”标签,其中包含一个特定于其所居住表单的值。
这是一个例子:
<form method=\"post\">
<input type=\"hidden\" value=\"my_form\" />
<!-- Everything else goes here unchanged. -->
</form>
然后,在PHP中,您可以使用类似以下内容的东西:
if(isset($_POST[\"my_form\"]))
{
// Deal with the sent data.
}
, 首先处理单击然后提交并使用.serializeArray();
和.push
组合数组似乎是一种更优雅的解决方法。即使具有更多提交按钮的表单也可以使用:
<script type=\"text/javascript\">
$(document).ready(function() {
var submitname;
$(\"#submit_signup\").click(function(event) {
submitname=\'submit_signup\';
});
$(\'#myform\').submit(function( event ){
var postarray = $(\'#myform\').serializeArray();
postarray.push({name: submitname,value: 1});
$.post(\'script/myscript.php\',postarray,function(data){
/* do what you need with data variable */
})
event.preventDefault(); // avoid to execute the actual submit of the form.
})
})
</script>
在这种情况下,您的提交字段应具有id属性“ submit_signup”。
<input type=\"submit\" id=\"submit_signup\" name=\"submit_signup\" value=\"Submit your form\" />
, 您可以检查它是否为php代码中的发布请求:
if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。