即时删除数据无法正常工作

时间:2011-09-01 04:02:45

标签: php jquery ajax codeigniter

我正在尝试使用jquery ajax删除一些数据,特别是配方的成分,我正在使用CodeIgniter框架,但它失败了。以下是我的代码部分:

$(".delete").live('click',function()
{
 var ri_id = $(this).attr('id');
 if(confirm("Are you sure you want to delete this ingredient? Action cannot be undone."))
 { 
  var r_id = "<?php echo $this->uri->segment(3); ?>";
  alert(ri_id +" " +r_id); 
  $.ajax({
     type: "POST",
     url: "/ingredient/delete",
     data: "ri_id="+ri_id +"&r_id=" +r_id,
     success: function(){
      $(this).parent().parent().parent().remove();
     },
     failure : alert('fail')
  });

然后这是我的ingredient.php:

class Ingredient extends CI_Controller {

    function delete()
    {
        $data['ri_id']= $this->input->post('ri_id');
        $data['r_id']= $this->input->post('r_id');

        if (!empty($data['id']))
        {
            $this->load->model('ingredient_model', '', TRUE);
            $this->ingredient_model->delete_recipe_ingr($data);
            $this->output->set_output('works');
        } 
        else 
        {
            $this->output->set_output('dontwork');
        }
    }

}

和我的模特:

  class Recipe_model extends CI_Model
  {
      public function delete_recipe_ingr($data)
      {
          $this->db->where($data);
          $this->db->delete('st_recipe_ingredients');  
      } 
  }

我错过了什么或是我的代码错了吗?我将衷心感谢您的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我的第一个猜测是this不是你认为的那样:

success: function(){
  $(this).parent().parent().parent().remove();
},

来自fine manual

  

<强>上下文
  此对象将成为所有与Ajax相关的回调的上下文。默认情况下,context是一个对象,表示调用中使用的ajax设置($.ajaxSettings与传递给$.ajax的设置合并)。

因此,在success回调中,this几乎是一个简单的对象,而不是DOM中的内容。

有两种标准解决方案。您可以保存对this的引用并使用:

var self = this;
$.ajax({
    // ...
    success: function() {
        $(self).parent().parent().parent().remove();
    },
    // ...

或使用context选项$.ajax

$.ajax({
    // ...
    context: this,
    success: function() {
        $(this).parent().parent().parent().remove();
    },
    // ...

当然,请修正评论中讨论的failure内容。