Javascript 序列化和发布表单时,JQuery隐藏字段值为null

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

我有以下html脚本:

<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">