2013-08-30 83 views
0

我在找我如何完成這個下一個任務。我有一個控制器加載一個視圖,其中列出了我的數據庫中的頁面。在表格中的每一行中都有一個點擊圖標的位置,當點擊它時會執行以下兩項操作之一。使用一個刪除函數的PHP請求的後jquery請求

如果用戶不啓用JavaScript:

  • 點擊該圖標會重定向到刪除功能在控制器與頁面的ID作爲放慢參數
  • 刪除控制器功能將運行刪除功能在模型中發送頁面id刪除模型功能
  • 刪除模型中的功能將從數據庫中刪除頁面,當返回到頁面控制器刪除功能時,它將重新導向回到索引功能以再次顯示頁面列表。
  • 重定向後,它將顯示一個標題和消息成功/失敗。

如果用戶確實啓用JavaScript:

  • 發個帖子刪除功能的控制器使用jQuery後 方法與數據頁ID
  • 刪除控制器功能將運行刪除功能模型發送頁面id刪除模型功能
  • 刪除模型中的功能將從數據庫中刪除該頁面,當返回到頁面控制器刪除功能時,它爲json對象創建一個消息數組以返回成功函數n發佈的請求。
  • 我pnotify插件的消息將創建一個從JSON對象形成一個消息,並將其顯示給用戶

我想知道的是這樣做如何正確適應這兩個場景?我已經開始嘗試,但是如果我迄今犯了一個錯誤,我想澄清一下。

<?php 
// Controller delete function 
public function delete($content_page_id) 
{ 
    if (isset($content_page_id) && is_numeric($content_page_id)) 
    { 
     $content_page_data = $this->content_page->get($content_page_id); 
     if (!empty($content_page_data)) 
     { 
      //update is ran instead of delete to accompodate 
      //for the soft delete functionality 
      $this->content_page->update('status_id', 3); 
      if ($this->input->is_ajax_request()) 
      { 
       //return json data array 
      } 
     } 
    } 
} 
?> 

全球JS中使用文件的多個表與刪除按鈕

/* Delete Item */ 
$('.delete').click(function(event) { 
    event.preventDefault(); 
    var item_id = $(this).attr('rel'); 
    $.post(<?php echo current_url(); ?>'delete', { item_id : item_id }, function(data) 
    { 
     if (data.success) 
     { 
      var anSelected = fnGetSelected(oTable); 
      oTable.fnDeleteRow(anSelected[0]); 
     } 
    }, 'json'); 
}); 
+0

你可以做一兩件事,檢查它是否Ajax請求或不在您的控制器。根據這個標準打開回復 –

+0

它看起來像你正在處理它的部分輸入 - > is_ajax_request()這可能是這樣做:http://davidwalsh.name/detect-ajax –

回答

5

我認爲你應該在PHP中有着兩個功能:

public function delete($content_page_id) { 
    // Your delete code 

    return "a string without format"; 
} 

public function deleteAjax($content_page_id) { 
    return json_encode($this->delete($content_page_id)); 
} 

因此,當用戶JS啓用後,您調用deleteAjax在$ .post函數中傳遞一個參數讓PHP知道JS已啓用:

$.post(<?php echo current_url(); ?>'delete', { item_id : item_id, js: 1 }, function(data) 
{ 
    if (data.success) 
    { 
     var anSelected = fnGetSelected(oTable); 
     oTable.fnDeleteRow(anSelected[0]); 
    } 
}, 'json'); 

如果JS被禁用,則調用其他函數。您應該使用AJAX專用控制器,而不是同一個類中的某個功能。

+0

我想過這樣做,但我不確定,因爲它基本上做同樣的事情。任何想法,我應該做什麼來顯示一個消息,雖然在php刪除功能後。 – user2576961

+0

上面的代碼不適合你嗎?如果沒有,那麼你的代碼就沒問題,你在做什麼沒有錯誤。對於不同的方法通常具有單獨的功能或控制器。例如,Wordpress和Prestashop爲AJAX調用提供了專門的控制器。隨着項目的增長,將所有內容保存在同一個地方可能會變得困難。 – Skaparate

+0

我不知道。 – user2576961

0

1)就「顯示消息」而言 - 視圖本身可以準備好用於'消息'(如果存在的話)。帶我們回到......

2)你可以讓你的刪除功能返回你想要顯示的消息嗎?您的AJAX方法將忽略此消息,而您的視圖將顯示它...

3)我同意你的'控制器刪除函數'應該根據請求是否是AJAX以不同的結果'完成'。我喜歡什麼@Skaparate(在18:37回答8月30日)與加做:js:1在你刪除功能,你可以在一個簡單的條件使用:

如果JS = 1
   頭( 'HTTP/1.1 200');
其他
   調用視圖,包括/轉發的「消息」