使用 ajax 调用加载视图 codeigniter

Posted

技术标签:

【中文标题】使用 ajax 调用加载视图 codeigniter【英文标题】:use ajax call to load a view codeigniter 【发布时间】:2020-07-11 07:21:46 【问题描述】:

我正在尝试通过 ajax 加载视图,通过控制器传入一个 post 变量,下面是我的 ajax 调用:

 $('#image_id').on('click',function()
    var image_id = $('#image_id').val();
    alert(image_id);
    if(image_id != '')

    
        alert('called');
        $.ajax(
            url:"<?php echo site_url('Site/load_add')?>",
            method:"POST",
            dataType: "html",
            data:add_id:image_id,
            success:function(data)
            
                window.location.href = "<?php echo site_url('Site/load_add')?>";
            
        );
    
    else
    
        alert('Error');
    
);

我正在使用 add_id 从下面控制器中的数据库中检索数据:

public function load_add()

    $this->load->model('Product_model');
    $data['advert_data']=$this->Product_model->get_specific_add($this->input->post('add_id'));

    $array_info2 = array(
        "title" => "View Add"
    );
    $this->load->view('include/header', $array_info2);
    $this->load->view('include/navbar_logged_in');
    $this->load->view('Site/site_load_add',$data);
    $this->load->view('include/footer');


我在从 DB 检索数据时遇到错误,因为模型没有 add_id。以下是我的模型代码

 public function get_specific_add($image_id)


    $this->db->select('adverts.title,adverts.item_condition,adverts.add_type,adverts.address,adverts.price,adverts.negotiable,adverts.product_description,adverts.create_time, users.first_name,users.last_name,users.mobile,users.email,users.image_name');
    $this->db->from('adverts,countries,states,cities,users');
    $this->db->where('adverts.id= $image_id_new');
    $this->db->where('adverts.country_id=countries.id');
    $this->db->where('adverts.city_id=states.id');
    $this->db->where('adverts.area=cities.id');
    $this->db->where('adverts.user_id=users.id ');
    $this->db->where('adverts.id= $image_id');
    $query = $this->db->get();
    return $query->result();



感谢是否有人可以帮助我。我要加载的页面是 Site/site_load_add。谢谢

【问题讨论】:

你在$data['advert_data'] 中得到了什么?是您期望的正确数据吗? 你得到 $this->input->post('add_id');在load_add()? Product_model->get_specific_add,没有得到post变量add_id,所以页面返回数据库错误。 $this->db->where('adverts.id= $image_id');,$image_id 在我的 ajax 请求中不包含 add_id。 你得到 $this->input->post('add_id');在 load_add() 中?没有返回任何东西...... 所以问题来了,先获取 $this->input->post('add_id');这个。 【参考方案1】:

你已经用两个GET|POST 调用了相同的url,第一次调用POST 是可以的,但是在GET 那是你的错误。

$.ajax(
    // first call is OK!
    url:"<?php echo site_url('Site/load_add')?>",
    method:"POST",
    dataType: "html",
    data:add_id:image_id,
    success:function(data)
    
        // BUG HERE, This's a GET call and with No query string
        // Will `$this->input->post('add_id')` found nothing.
        window.location.href = "<?php echo site_url('Site/load_add')?>";
    

【讨论】:

这是你的答案? OP 不会通过 ajax 调用在function load_add() 中发送image_id 在 ajax 调用是可以的,但是在 ajax 成功有window.location.href 再次调用load_add 那么 OP 是做什么的? 认为window.location.href = "&lt;?php echo site_url('Site/load_add')?&gt;"是错误的,可能是&lt;?php echo site_url('Redirect to some url')?&gt;或者不是&lt;?php echo site_url('Site/load_add?add_id=123')?&gt;然后在load_add检查input-&gt;get|post(add_id)【参考方案2】:

感谢大家的支持,我通过以下广告的 ID 进行排序:

public function load_add($id)


    $this->load->model('Product_model');
    $data['advert_data'] = $this->Product_model->get_specific_add($id);
    $data['adverts'] = $this->Product_model->get_adverts();//get database query output to the array

    $array_info2 = array(
        "title" => "View Add"
    );
    $this->load->view('include/header', $array_info2);
    $this->load->view('include/navbar_logged_in');
    $this->load->view('Site/site_load_add', $data);
    $this->load->view('include/footer');

谢谢

【讨论】:

以上是关于使用 ajax 调用加载视图 codeigniter的主要内容,如果未能解决你的问题,请参考以下文章

在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行

使用ajax在codeigniter控制器中调用函数不起作用

jquery Ajax 调用 Codeigniter 控制器

如何使用 CodeIgniter 中的 AJAX 函数更改网页的数据

在 codeigniter PATH 中调用控制器模型和视图

codeigniter 从控制器返回获取数据以通过 Ajax 请求查看