Ajax数据未发送到控制器功能(CodeIgniter)

时间:2018-08-31 15:10:27

标签: ajax codeigniter

我有一个锚标记,希望将其data-id发送到控制器中的某个函数,该控制器随后将通过模型从数据库中检索数据。 但是,数据没有通过控制器。 Ajax响应显示数据已发送,但控制器显示否则。

这是我的Ajax代码:

$(document).on("click",".learn-more",function(){
   var sub_item_id = $(this).data("id");
   $.ajax({
      url:"<?php echo base_url();?>Designs/business_cards",
      type:"POST",
      data:{sub_item_id:sub_item_id},
      success:function(data){
          console.log(data);
      },
      error: function(error){
        throw new Error('Did not work');
      }
   })
}); 

我已经设置了数据类型:“ json”,但是没有发送数据,所以我删除了数据类型并且它起作用了,即ajax部分。或者至少响应显示数据已发送。 我的控制器代码是:

function business_cards(){
    $id = $this->input->post('sub_item_id');
    $data['quantity'] = $this->subproduct_model->get_quantities($id);
    $this->load->view('category/business-cards',$data);
}

我的模型代码是:

public function get_quantities($sub_item_id){   
     $this->db->select('quantities');
     $this->db->where('id',$sub_item_id);
     $query = $this->db->get('sub_products');
     return $query->result_array();
}

包含锚标记的HTML代码

<?php foreach ($results as $object):?>
<a href="#" data-toggle="modal" data-id="<?=$object['id'];?>" data-target="#pricelist-modal-2" class="learn-more">View Prices</a>
<?php endforeach?>

data-id根据迭代显示正确的值。

当我检查模型代码的结果数组时,它是一个空数组,表明未在控制器中传递$sub_item_id。可能是什么问题?

2 个答案:

答案 0 :(得分:0)

我刚刚复制了您的代码,就可以在控制器中获取该值。 在控制器函数中执行var_dump($ id)。然后在开发人员工具(F12)中检查控制台。由于您具有console.log(data),因此var_dump应该在控制台中。它不会显示在屏幕上。

要检查的其他事项:

您的数据库是否具有该ID的记录? db结果数组可以为空,因为它实际上应该为空吗?

您确定单击代码时data-id实际上有一个值吗?

答案 1 :(得分:0)

它不会传递给控制器​​,因为您忘记在控制器的功能内放入参数。

  

注意:您不能使用 输入帖子 ,因为您没有使用表单。

function business_cards($id){ //put a parameter here, serve as container of your passed variable from **ajax**
    //$id = $this->input->post('sub_item_id');
    $data['quantity'] = $this->subproduct_model->get_quantities($id); //pass the id to your model
    $this->load->view('category/business-cards',$data); 
}

将您的ajax代码更改为此。

  $(document).on("click",".learn-more",function(){
     var sub_item_id = $(this).data("id");
     $.ajax({
        url:"<?php echo base_url('Designs/business_cards/"+sub_item_id+"');?>", //pass the id here
        type:"POST",
        success:function(data){
            console.log(data);
        },
        error: function(error){
          throw new Error('Did not work');
        }
     })
  });