为什么序列化(Jquery)不包含提交按钮名称?
在PHP中,我通常这样做:
if (isset($_POST['submit_signup'])) {
print_r($_POST);
//Then check firstname, password, etc POSTS
}
那不起作用,解决方法是什么?
答案 0 :(得分:3)
不确定这是否是最优雅的解决方案,但您可以使用隐藏的输入框来包含值(最好是更改的内容,如某种哈希)并检查它。像:
<input type="hidden" name="signup_submitted" value="random_hash" />
在您的代码中,您可以这样做:
if(isset($_POST['signup_submitted']))
{
// Do your work;
}
警告:哈希在这里不是一个安全问题,只是一种方法来做你习惯的事情。
小更新:我注意到你也问'为什么'JQuery不包含serialize()
输出中的提交按钮。这是HTML草稿中指定的默认行为。只要没有按下提交按钮,就不应该将其包含在提交的(或序列化的)数据中。 JQuery创建者决定尊重它,而不是将其包含在序列化字符串中。
答案 1 :(得分:3)
“提交”类型的<input>
标记的“值”属性用于确定标签 - 提交按钮的标签。它并不意味着被发送。
您要求的替代解决方案可能是“隐藏”类型的<input>
标记,其中包含特定于其所在表单的值。
以下是一个例子:
<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.
}
答案 2 :(得分:0)
似乎是更优雅的解决方法,首先处理点击,然后使用sencha app upgrade [path/to/touch-2.4.2]
和.serializeArray();
提交并合并数组。它甚至适用于具有更多提交按钮的表单:
.push
在这种情况下,您的提交字段应具有id属性“submit_signup”。
<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>
答案 3 :(得分:-2)
您可以在php代码中检查它是否是发布请求:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// ...
}