我试图在使用 jquery 可排序时将图像列表的顺序保存到数据库中。我觉得我非常接近,但无法理解最终的细节。我正在使用 CI 2.1.3 和 jquery-ui 1.10.3。
我有一个带有图像的动态生成列表:
<ul id="order">
<li id="item-1"><img src="abc.jpg" /></li>
<li id="item-2"><img src="def.jpg" /></li>
<li id="item-3"><img src="ghi.jpg" /></li>
</ul>
以及以下 Jquery:
<script>
$(document).ready(function() {
$( "#order" ).sortable({
opacity: 0.6,
cursor: 'move',
update: function(event, ui){
var order = $(this).sortable("serialize");
console.log(order);
$.ajax({
url: "http://localhost/gridrobin/home/save_order",
type: 'POST',
data: order,
success: function (data) {
$("#test").html(data);
}
});
}
});
});
</script>
这工作正常,我可以重新排序我的列表。现在我想将新订单保存到数据库中。我将 ajax 帖子发送到控制器,它通过了。我检查了一个 var_dump。
//var_dump($_POST);
$items = $this->input->post('item');
$total_items = count($this->input->post('item'));
echo '<h3>Debugging</h3>';
echo "<p>Total items sent: $total_items</p>";
$this->rd_model->update_order($total_items, $items);
然后我将此数据发送到我的模型:
for($item = 0; $item < $total_items; $item++ )
{
$data = array(
'id' => $items[$item],
'order' => $order = $item
);
$this->db->where('id', $data['id']);
$this->db->update('portfolio_items', $data);
echo '<br />'.$this->db->last_query();
}
并回显最后一个 db-query 以进行调试。
现在,当我切换项目 1 和项目 2 时,我收到 500 内部错误。当我将它们切换回来时,我会收到上次执行的查询的回声,这似乎很好。
UPDATE `portfolio_items` SET `order` = 1 WHERE `id` = '1'
UPDATE `portfolio_items` SET `order` = 2 WHERE `id` = '2'
UPDATE `portfolio_items` SET `order` = 3 WHERE `id` = '3'
我不太明白为什么当列表切换回其原始状态时数据库会更新,否则不会。
更新 对于有同样问题的人,sakibmoon 回答对我帮助很大,但主要问题是重复输入错误,因为显然我已将订单表设置为唯一索引......