2012-04-16 30 views
0

我試圖用jQuery的崗位要求刪除的元素:jQuery的電話後與笨失敗

$(function(){ 
    //The element 
    // <a data-id="39" data-toggle="modal" href="#delete"><i class="icon-trash"></i> 

Delete</a> 


    $('.delete').on('click',function(){ 
     var id= $(this).attr('data-id'); 


    $.post('task/delete', { id: id }, function(data) { 
     alert('Task deleted!'); 
    }) 
    .success(function(){ alert('Task deleted!'); })   
    .complete(function(){ alert('Task completed!'); }) 
    .error(function(){ alert('Error was found!'); }); 
    }) 

}); 

我的控制器被稱爲任務,裏面的函數被調用刪除。

該模型很簡單..它只是刪除記錄。

public function deleteTask($task_id) 
    { 
     $task_id = mysql_real_escape_string($task_id); 
     $this->db->query("DELETE FROM tasks WHERE task_id = ?", array($task_id)); 

    } 

我得到兩個messages..one是錯誤,一個是刪除... ,我想避免被人張貼ID控制器任務..這將由一個刪除一個記錄的另一件事自動,有沒有辦法避免這一點呢?

回答

1

你的控制器方法應該是這個樣子

public function delete() 
{ 
    // Do user validation here 
    $this->load->model('tasks_model'); 
    $this->tasks_model->task_delete($this->input->post('id')); 
    return "task deleted"; 
} 

你的模型方法,這樣

public function task_delete($task_id) 
{ 
    $this->db->where('task_id', $task_id); 
    $this->db->delete('tasks'); 
} 

正如我建議確認,其中評論說,你應該用戶,並使用CI的活動記錄庫,您可以將可移植性提高到不同的數據庫。

編輯

爲了顯示PHP錯誤(也許是MySQL的錯誤,如果他們打開)。

error_reporting(E_ALL); 

爲了確保任務被刪除,這樣做(這是效率不高)。

public function task_delete($task_id) 
{ 
    $this->db->where('task_id', $task_id); 
    $this->db->delete('tasks'); 

    $this->db->from('tasks'); 
    $this->db->where('task_id', $task_id); 

    $query = $this->db->get(); 

    if ($query->num_rows() > 0) 
    { 
    return FALSE; 
    } 
    else return TRUE; 
} 

然後用控制器中返回的布爾值做些什麼。

+0

我做了你告訴我的..如何顯示sql錯誤?..有ajax請求時..我怎麼知道sql執行成功與否? – 2012-04-16 12:03:44

+0

要監控您的AJAX請求,您可以右鍵單擊頁面上的任意位置,選擇「檢查元素」菜單項,然後在打開的新窗口中選擇「網絡」。在那裏,您將能夠準確地看到您發送的內容以及您在AJAX調用中返回的內容。 (如果正在進行大量的調用,您可以選擇底部的「XHR」以僅查看AJAX調用)。 – manavo 2012-04-16 12:08:29

+0

好吧,我現在會嘗試..它不是sql錯誤..因爲我刪除了sql代碼...它是在控制器中的東西 – 2012-04-16 12:11:36

1

你有沒有在你的控制器中使用的函數名應該是:

$this->task_delete->deleteTask($id); 
+0

它給了我404 ..當我發送請求...通過鉻 – 2012-04-16 11:49:04

+0

使用$ .post('<?php回聲base_url();?>任務/刪除') – 2012-04-16 11:51:34

+0

那好吧,我把完整的網址..它返回200 ..但鉻空白..它顯示一條消息,說有什麼問題與頁面一起... – 2012-04-16 11:53:35

1

爲了避免有人張貼的所有ID和刪除所有的任務,你應該只刪除屬於該用戶的任務。

我猜你保存每個任務,因此它屬於一個特定的用戶,對吧?所以在你的刪除查詢中,你可以讓它運行一個DELETE WHERE task_id = {task_id}和user_id = {user_id}。 user_id是您在會話中保存的內容。

請注意,在運行數據庫查詢時,可以綁定參數,這意味着CI負責使參數安全。所以,你可以修改你上面的查詢是這樣的:

$this->db->query("DELETE FROM tasks WHERE task_id = ?", array($task_id)); 

你可以閱讀更多關於此這裏:http://codeigniter.com/user_guide/database/queries.html在底部(查詢綁定部分)。

至於你得到錯誤和成功消息的錯誤,可能會出現一些不同的情況。我不知道,如果複製代碼時有什麼地方出了問題,但你必須在PHP代碼中的錯誤:

$this->load->model('tasks_model','task_delete'); 
$this->task_delete($id); 

應該是:

$id = $this->input->post('id'); // the data is posted, it won't be passed in as an argument to the controller function 
$this->load->model('tasks_model','task_delete'); 
$this->task_delete->deleteTask($id); 

和您的查詢也似乎有一個錯誤,所以最好按照我上面提到的那樣做。

+0

哈哈..我做了更正..它等待一些秒......然後鉻崩潰..如何調試這 – 2012-04-16 11:56:05

+0

這很奇怪。我無法想象爲什麼會導致瀏覽器崩潰。正如上面Shayan所建議的那樣,你應該改變返回「被刪除的任務」;被回聲「任務刪除」;我知道這可能不會有太大的幫助,但也許可以在其他瀏覽器中嘗試。 – manavo 2012-04-16 12:05:05

+0

錯誤是否接受數據參數? – 2012-04-16 12:07:01