我有一个包含可排序行的表。该表是从一个mysql数据库生成的,该数据库有一个名为“displayorder”的字段,可以输出表格。当用户拖放行时,我想使用AJAX在用户删除行时将这些更改提交给数据库。
目前,我可以看到来自AJAX调用成功部分的console.log()输出,当我输出数据(订单)时,它看起来很棒,如下所示:
["order_1=1", "order_2=2", "order_4=3", "order_3=4"]
但根据Firebug的说法,所有在$ _POST中传递的内容都是“未声明的”。 如何从indexpage_order.php文件中访问该订单变量?
我有这个jquery代码:
<script>
$(document).ready(function() {
var fixHelper = function(e, tr) {
var $originals = tr.children();
var $helper = tr.clone();
$helper.children().each(function(index)
{
$(this).width($originals.eq(index).width())
});
return $helper;
};
var sortable = $("#sort tbody").sortable({
helper: fixHelper,
stop: function(event, ui) {
//create an array with the new order
order = $(this).find('input').map(function(index, obj) {
var input = $(obj);
input.val(index + 1);
return input.attr('id') + '=' + (index + 1);
});
$.ajax({
type: 'POST',
url: 'indexpage_order.php',
data: order,
error: function() {
console.log("Theres an error with AJAX");
},
success: function(order) {
console.log("Saved.");
console.log(order);
}
});
return false;
}
});
});
</script>
indexpage_order.php包含:
if(isset($_POST) ) {
while ( list($key, $value) = each($_POST) ) {
$id = trim($key,'order_'); //trim off order_
$sqlCommand =
"UPDATE indexpage
SET displayorder = '".$value."'
WHERE id = '".$id."'";
$query = mysqli_query($myConnection,$sqlCommand) or die (mysqli_error($myConnection));
$row = mysqli_fetch_array($query);
}
}
答案 0 :(得分:1)
您只需重写生成POST数据的js代码即可。
order = {}
$(this).find('input').map(function(index, obj)
{
return order[this.id] = index;
}
)
休息应该在PHP中工作。
答案 1 :(得分:0)
使用ajax在POST方法的PHP文件上尝试$ _REQUEST而不是$ _POST。
答案 2 :(得分:0)
看起来您在JavaScript数组中发送订单
当它到达你的PHP时,它是不可读的。
如果对象查看json_decode函数。 如果它是一个数组,在数据开始之前序列化数据,然后在php端unserialize。
除非正确编码/序列化,否则PHP无法理解JavaScript数组或对象。
答案 3 :(得分:0)
将js数组order
转换为json对象,因为ajax数据需要使用JSON.stringify
在json中。因此,它需要在ajax函数中为data:JSON.stringify(order),
。
或者,在ajax函数中使用json_encode
这样的data: <?php echo json_encode(order); ?>,
答案 4 :(得分:0)
order
是一个数组。在您的ajax脚本中将order
转换为query string
,
data: order.join('&'),