ajax是局部刷新。
用jQuery來實現,會簡化很多。
下面進行詳細的說明,結合一個ajax刪除的案例來進行。
首先看html界面的代碼:
<a href="javascript:;" onclick="delete_order('<?php echo $item[order_id]; ?>')"><img src="images/admin/delete-icon.png" border="0" /></a>
這個一個圖片鏈接,表示刪除。它並不跳轉到某個界面,而是點擊時出發click事件。
click事件執行delete_order()方法。這個方法中傳遞了一個參數,訂單號。通過這個參數,可以去執行相應的刪除操作。
下面jQuery代碼:
<script> function delete_order(order_id){ confirm_ = confirm('This action will delete current order! Are you sure?'); if(confirm_){ $.ajax({ type:"POST", url:'index.php/admin/order/del/'+order_id, success:function(msg){ //alert("test order"); //all delete is success,this can be execute $("#tr_"+order_id).remove(); } }); } }; </script>
首先出發一個提示框,確認刪除嗎?
如果確認的話,執行ajax操作。
在jQuery中,有一個$.ajax()的方法。
這里有三個參數,一個是類型,這里面用的是POST,
第二個是地址,這個很關鍵,它負責將數據,傳送到后台服務器去執行。
第三個參數是一個回調函數,如果執行刪除成功,就會執行的操作。這個時候,就可以執行一些動作,比如將這條已刪除的記錄,移除。結合的是下面的這行代碼。為沒條記錄,賦予一個動態的id,作為刪除時使用的依據。這里要注意的是,必須后台執行的所有都成功之后,才會執行這個回調函數。
<tr id="tr_<?php echo $item['order_id']; ?>"></tr>
下面的是后台執行的代碼:
function del() { $order_id = $this->uri->segment(4); if ($order_id > 0) { $this->db->delete('billing', array('order_id' => $order_id)); $this->db->delete('shipping_address', array('order_id' => $order_id)); $this->db->delete('order_products', array('order_id' => $order_id)); $this->db->delete('comments', array('order_id' => $order_id)); } $this->db->delete($this->tbname, array('id' => $order_id)); }
這個后台控制器中的一個方法,通過$this->uri->segment();方法獲取參數,將參數賦值給變量order_id。
然后,就可以在后台執行相應的刪除操作了。如果刪除都成功的話,就會有一個默認的信息傳遞給success方法。
今天遇到的success方法執行不成功的原因,就是因為有一個刪除操作執行不成功,那個隱藏的信息傳遞不到success方法。為什么不成功呢?因為$this->db->delete('shipping_address', array('order_id' => $order_id));與數據庫中的表名不對應,大概是被別人修改了。
后來修正之后,success方法成功執行。
這是一個簡單的ajax實例。可以簡單的說明ajax的作用。不需要刷新界面,直接偷偷的去后台進行操作即可,操作成功后,還可以執行相應的動作,通過jQuery來完成。