使用AJAX处理序列化数组时出现问题

时间:2012-08-17 19:49:05

标签: jquery ajax

我试图在$ .post调用中包含两个变量和一个序列化表单,而我发现这样做的唯一方法是使用serializeArray()而不是serialize(),然后添加额外的变量进入数组。正确处理所有表单元素,但是额外的两个变量(顺序和列)不是。

JQ:

        var order = 'asc';
        var column = 'description';

        $('#task_form').submit(function(e){
            var formData = $("#task_form").serializeArray();
            formData.push({column: column, order: order});

            $.post('process.php', formData, function(data){
                // clear the current task table
                $('#tbody').empty();
                // refresh the task table with the newly inserted task
                $(data).appendTo('#tbody');
                $('#tasks_table').trigger('update');
                $("#description_text").val('');
            });
            e.preventDefault();
        });

PHP:

if(isset($_POST['description_text'])){
    $description = $_POST['description_text'];
    $duration = $_POST['duration_text'];
    $deadline = $_POST['deadline_text'];
    $order = $_POST['order'];
    $column = $_POST['column'];
    TaskDB::createLog($order.' '.$column);

    // convert the date
    $pieces = explode('/', $deadline);
    $month = $pieces[0];
    $day = $pieces[1];
    $year = $pieces[2];

    $newDate = $year.'-'.$month.'-'.$day;
    // create a new task object, add it to database
    $task = new Task('DEFAULT', $description, $duration, $newDate, '0');
    TaskDB::addTask($task);
    TaskDB::generateTaskTable();
}

任何人都知道这是为什么?

3 个答案:

答案 0 :(得分:3)

根据序列化数组文档(http://api.jquery.com/serializeArray/),您需要重新格式化附加到数组。

需要namevalue对。

您需要格式化附加内容,如下所示:

formData.push({name: "column", value: column});

我相信你可以弄明白其余的。

答案 1 :(得分:0)

serializeArray返回一个对象数组,每个对象包含{name: 'fieldName', value: 'fieldValue'}

您需要以相同的格式推送您的值。

formData = formData.concat([{name: 'column', value: column}, {name: 'order', value: order}]);

OR

formData.push({name: 'column', value: column});
formData.push({name: 'order', value: order});

另一种解决方案是使用serialize()$.param

var formData = $("#task_form").serialize();
formData += '&'+$.param({column: column, order: order});

答案 2 :(得分:0)

serializeArray方法生成一个对象数组,其中包含键和值。试试这段代码:

formData.push([{name: 'column', value: column});
formData.push([{name: 'order', value: order});