第二次调用时serialize()值错​​误

时间:2015-06-22 18:51:58

标签: php jquery ajax serialization

我有一个我打电话的页面,它在ajax调用中有一个表单提交。当第二次调用该函数时,它在ajax调用数据中有原始数据。

我已经将序列化部分简化为此:

test_form.php

    function form($a, $b) {
    ?>
    <form name="myform" id="myform">
        <input type="text" id="a" name="a" value="<?php echo $a; ?>" />
        <input type="text" id="b" name="b" value="<?php echo $b; ?>" />
    </form>
    <script>
        console.log($("#myform").serialize());
    </script>
    <?php
}

然后从单独的文件中调用它:

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" type="text/css" href="/P3Live/_includes/css/gametypes.css">
    <link rel="stylesheet" type="text/css" href="/P3Live/_includes/css/tables.css">
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script> 
    <script src="/P3Live/_includes/js/general_functions.js"></script> 
</head>
<?php
error_reporting(E_ERROR);
include_once("test_form.php");

form("firstA", "firstB");
echo "step # 1 should be started <br />";


form("secondA", "secondB");
echo "step # 2 should be started <br />";
?>

触发第二个文件时,结果为:

HTML页面: firstA(输入框1)firstB(输入框2) 步骤#1应该开始

secondA(输入框1)secondB(输入框2) 步骤#2应该开始

控制台: 一个= firstA和b = firstB 一个-firstA和b = firstB

您会注意到输入字段是正确的,但底部的序列化数据不是。它显示来自第一次调用的两个结果的相同序列化数据。我尝试发布截图,但没有声誉点。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您正在创建两个具有相同ID的表单,并且由于ID是唯一的,您从第一个表单中获取数据,因为jQuery选择的是重复的ID,即具有该ID的第一个元素。

尝试创建具有唯一ID

的表单

function form($a, $b, $id) {
    ?>
    <form name="myform" id="<?php echo $id; ?>">
        <input type="text" id="a" name="a" value="<?php echo $a; ?>" />
        <input type="text" id="b" name="b" value="<?php echo $b; ?>" />
    </form>
    <script>
        console.log($("#<?php echo $id; ?>").serialize());
    </script>
    <?php
}

然后再做

form("firstA", "firstB", "myForm1");
form("secondA", "secondB", "myForm2");

答案 1 :(得分:0)

这是因为两种形式的ID都是一样的。您必须为第二个表单分配新ID。它应该是这样的:

<?php
function form($a, $b) {
    static $i = 0;
    ?>
    <form name="myform<?php echo $i; ?>" id="myform<?php echo $i; ?>">
        <input type="text" id="a" name="a" value="<?php echo $a; ?>" />
        <input type="text" id="b" name="b" value="<?php echo $b; ?>" />
    </form>
    <script>
        console.log($("#myform<?php echo $i; ?>").serialize());
    </script>
    <?php
    $i++;
}