Jquery表单序列化问题

时间:2012-04-02 11:13:18

标签: jquery ajax serialization

我有一张表格

<form method="post">

<input type="text" name="name" /><br />
<input type="text" name="test1" /><br />
<input type="text" name="test2" /><br />
<input type="text" name="test3" /><br />
<input type="text" name="test4" /><br />
<input type="text" name="test5" /><br />
<input type="text" name="test6" /><br />
<input type="submit" name="submit" /><br /></form>

我写了一个像这样的jquery ajax脚本

$(":input[ name= 'submit']").click(function(){

    var values = $("form").serialize();

    $.ajax({
        url:"test.php",
        type:"post",
        dataType:"json",
        data: {
            method: "test",
            data: values
        },
        success: function(){
            alert("success");
        },
        error:function(){
            alert("failure");
        }   
    }); 
    return false;   
});
  

data: { method: "test", data: values }

但是当我在ajax.data元素中传递两个参数时,我无法在服务器端以$ _POST ['name']或$ _POST ['test1']的形式访问它。但是,如果我只向ajax.data元素添加一个参数,那么这是可能的。

请给我一个解决方案

2 个答案:

答案 0 :(得分:2)

.serialize方法已将表单值转换为必须按原样发送到服务器的键/值对。如果要传递其他值,可以在表单中使用隐藏字段。

像这样:

<form method="post">
    <input type="hidden" id="method" name="method" value="test" />

    <input type="text" name="name" /><br />
    <input type="text" name="test1" /><br />
    <input type="text" name="test2" /><br />
    <input type="text" name="test3" /><br />
    <input type="text" name="test4" /><br />
    <input type="text" name="test5" /><br />
    <input type="text" name="test6" /><br />

    <input type="submit" name="submit" /><br />
</form>

然后:

$('form').submit(function() {
    var values = $(this).serialize();
    $.ajax({
        url: "test.php",
        type: "post",
        dataType: "json",
        data: values,
        success: function(){
            alert("success");
        },
        error:function(){
            alert("failure");
        }   
    }); 
    return false;   
});

如果您需要在发送AJAX请求之前设置其他值:

$('#method').val('some other value');

另请注意,我订阅了表单的.submit事件而不是提交按钮的click事件,当用户在某些输入元素内按下Enter键时,它也会正确处理这种情况,而您的代码将不会被触发,因为从未点击过提交按钮,但表单已提交。

答案 1 :(得分:1)

你应该做

   data: values,
通过这种方式,您可以获取数据$_POST['test1'];

如果您需要使用隐藏字段发送额外数据

编辑如果你使用两个字段,例如你的例子中$_POST['data'](这里你将有序列化表格)和$_POST['method']

编辑2实际上$_POST['data']是一个字符串(name=abc&test1=&test2=&test3=&test4=&test5=&test6=)因为字符串设置为服务器,如果你访问$_POST['data']['name'],这会返回n,因为在php中你可以访问字符串作为数组,在您的情况下,您没有传递有效的索引,它返回第一个字符

$name = "aghjsghjgj";
echo $name['name'];//this echoes the first letter as name is not a valid index

echo $name[2];//this echoies the third letter , h

http://codepad.org/ferFnrKW