Javascript 序列化和发布表单时,JQuery隐藏字段值为null
我有以下html脚本:Javascript 序列化和发布表单时,JQuery隐藏字段值为null,javascript,jquery,post,serialization,Javascript,Jquery,Post,Serialization,我有以下html脚本: <form id="myForm"> ... <input hidden name="myInput" id="myInput"> ... </form> 然后,我序列化表单并将其发布到url中: $.post("my_url_here", $("#myForm").serialize()) 在我处理这篇文章的地方,我尝试通过以下方式访问隐藏的输入值: $_POST['myInput'] 但当我期望它具有我之前设置的值时,它显示n
<form id="myForm">
...
<input hidden name="myInput" id="myInput">
...
</form>
然后,我序列化表单并将其发布到url中:
$.post("my_url_here", $("#myForm").serialize())
在我处理这篇文章的地方,我尝试通过以下方式访问隐藏的输入值:
$_POST['myInput']
但当我期望它具有我之前设置的值时,它显示null(实际上为空)。如果我明确设置如下值:
<input hidden name="myInput" id="myInput" value="explicit_value">
它很好用。知道发生了什么吗
更新(整个代码,顺序与我的真实代码相同):
jQuery(文档).ready(函数($){
eventHandler(){
...
$('#myInput').val('此处为值');
myPostFunction();
}
});
...
...
jQuery(文档).ready(函数($){
window.myPostFunction=函数(){
警报($(“#myForm”).serialize();//它显示myField=&otherField=value
警报($(“#myInput”).val();//这显示了正确的值。
$.post(“my#url_here”,$(“#myForm”).serialize());
}
});
应该可以,但是试着和我的比较,看看结果:)您正在使用PHP,对吗?
尝试创建一个名为sendAjax.php的新php文件,并键入以下内容:
<!doctype html>
<html>
<head>
<title>http://stackoverflow.com/questions/35281545/jquery-hidden-field-value-null-when-form-is-serialized-and-posted</title>
<script src="jquery-1.7.1.min.js"></script>
</head>
<body>
<form id="myForm">
<input type="hidden" name="myInput" id="myInput"/>
</form>
<script>
(function(){
$('#myInput').val('a value here');
$.post("receiveAjax.php", $("#myForm").serialize(),
function(data){
alert(data);
});
})();
</script>
</body>
</html>
<?php
$data = $_POST;
var_dump($data);
?>
http://stackoverflow.com/questions/35281545/jquery-hidden-field-value-null-when-form-is-serialized-and-posted
(功能(){
$('#myInput').val('此处为值');
$.post(“receiveAjax.php”,$(“#myForm”).serialize(),
功能(数据){
警报(数据);
});
})();
然后创建另一个名为receiveAjax.php的新php文件,将其放入与sendAjax.php相同的文件夹中,并键入以下内容:
<!doctype html>
<html>
<head>
<title>http://stackoverflow.com/questions/35281545/jquery-hidden-field-value-null-when-form-is-serialized-and-posted</title>
<script src="jquery-1.7.1.min.js"></script>
</head>
<body>
<form id="myForm">
<input type="hidden" name="myInput" id="myInput"/>
</form>
<script>
(function(){
$('#myInput').val('a value here');
$.post("receiveAjax.php", $("#myForm").serialize(),
function(data){
alert(data);
});
})();
</script>
</body>
</html>
<?php
$data = $_POST;
var_dump($data);
?>
“hidden”应该是“type”属性的值,我不知道它是否相关,但尝试替换:
<input hidden name="myInput" id="myInput">
作者:
好的,谢谢大家的帮助,但我终于找到了解决方案。字段的名称不正确。我刚刚更改了字段的名称,现在一切正常。这应该是一个冲突的名称,但我没有意识到,因为脚本执行良好。在尝试了所有之后,我想改变名字。。。再次感谢大家 那应该有用。。。发送前,请尝试执行console.log($(“#myForm”).serialize())
。可能您的$('#myInput').val('a value here')
是在发布到php之后执行的。好吧,我为可见字段设置了一些值,它工作正常。我会尝试,但它应该是其他的。@MatiTucci我做了,是的,该字段的值是空的。我给post函数增加了一些延迟,但仍然是一样的。但奇怪的是,当我在post之前提醒$('#myInput').val()时,一切正常。当您控制台$(“#myForm”).serialize()
时,是否看到没有值的属性?或者根本看不到输入名称?因为如果您没有看到它,是因为您的
中没有它,我能想到的是,您可能会将$.POST脚本放在表单元素的顶部,因此基本上在加载表单元素之前首先执行ajax。但是,如果您提供完整的源代码,我们会更好地帮助您,因为我们将知道问题出在哪里:)请参阅我上面的评论。谢谢。我找到了这篇文章,试着在序列化之前显示()隐藏的元素,然后隐藏()它们:在这篇文章中,它与显示相关,但无论如何你都可以尝试(这可能是jquery问题,即使隐藏类型输入没有任何可视性…),因为你说过,如果你在html中显式指定一个值,它就会工作,您可以尝试如下设置值:document.getElementById('myInput')。value='myvalue'代码>甚至类似于:document.getElementById('myInput').setAttribute('value','myvalue')代码>然后进行序列化。
<input type="hidden" name="myInput" id="myInput">