我试图在$ .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();
}
任何人都知道这是为什么?
答案 0 :(得分:3)
根据序列化数组文档(http://api.jquery.com/serializeArray/),您需要重新格式化附加到数组。
需要name
,value
对。
您需要格式化附加内容,如下所示:
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});