我想保存圖像列表的順序到數據庫時使用jQuery排序。 我覺得我非常接近,但無法讓我的頭在最後的細節。 我正在使用CI 2.1.3和jquery-ui 1.10.3。codeigniter jquery可排序保存到數據庫
我有圖像的dynamicaly生成的列表:
<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查詢進行調試。
現在,當我切換項目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'
我不明白爲什麼數據庫更新時,列表切換回其原始狀態,但不是其他。
UPDATE 對於有同樣的問題,答案sakibmoon幫了我很多,但主要問題是重複的輸入錯誤,因爲很明顯我已經設置的順序表作爲唯一索引...
我複製了你在jQuery腳本中的內容,但是當我在控制器中運行var_dump時,我得到一個空數組。還有什麼你必須做的才能讓它起作用? – Drizzit12