当从AJAX POST请求调用控制器时,如何从Codeigniter中的控制器加载视图?

当从AJAX POST请求调用控制器时,如何从Codeigniter中的控制器加载视图?

问题描述:

I have a view which has an AJAX POST to a controller list_products_of_company :

$('select.product_dimension').change(function () {
  var a = "a";
  var b = "b";
  $.post("<?php echo base_url(); ?>home/list_products_of_company",
            {
                a : a, b : b
            }       
 )
});

Controller :

function list_products_of_company(){ 
        $a = $this->input->post('a');
        $b = $this->input->post('b');
        $this->data['products_of_company'] = $this->Home_model->get_products_of_company($a,$b);
        $this->load->view('product_list',$this->data);
}

How do I load the view with the data that I got from the database?

Edit:

I don't want to load the ajax response inside a div. I need the entire view page to be loaded in the window.

我有一个视图 strong>,它有一个到控制器的AJAX POST strong> list_products_of_company code>: p>

  $('select.product_dimension')。change(function(){
 var a =“a”; \  n var b =“b”; 
 $ .post(“&lt;?php echo base_url();?&gt; home / list_products_of_company”,
 {
a:a,b:b 
} 
)\  n}); 
  code>  pre> 
 
 

控制器 strong>: p>

  function list_products_of_company(){\  n $ a = $ this-&gt; input-&gt; post('a'); 
 $ b = $ this-&gt; input-&gt; post('b'); 
 $ this-&gt; data [  'products_of_company'] = $ this-&gt; Home_model-&gt; get_products_of_company($ a,$ b); 
 $ this-&gt; load-&gt; view('product_list',$ this-&gt; data); 
  } 
  code>  pre> 
 
 

如何使用从数据库中获取的数据加载视图? p>

编辑: strong> p>

我不想在div中加载ajax响应。 我需要在窗口中加载整个视图页面。 p> div>

If you want to load the view from your codeigniter controller don't use AJAX here instead I suggest you to modify your HTML like this:

<form id="form" method="post" action="action.php">
    <select name="select" id="select">
        <option value="">Select</option>
        <option value="1">One</option>
        <option value="2">Two</option>
    </select>
    <input type="submit" style="visibility:hidden;" name="sub" value="submit" />
</form>

And your jquery code like this so that you can directly submit the form on change of the select box and the action goes to the CI controller:

$(function () {
    $('#select').change(function () {
        $('#form').submit();
    });
});

And your CI home controller:

function list_products_of_company(){ 
        $a = $this->input->post('a');
        $b = $this->input->post('b');
        $this->data['products_of_company'] = $this->Home_model->get_products_of_company($a,$b);
        $this->load->view('product_list',$this->data);
}

$('select.product_dimension').change(function () {
  $.ajax({
    type: 'POST',
    url: "<?php echo base_url(); ?>home/list_products_of_company",
    dataType: 'text',
    success:
      function(data){
        //change the id to your div id. where you want to load the view
        $('#yourdivid').html(data);
      }
  });
});

I think this will help

You need to update your html as per response. say for example you want to response set with in div with id container. you can do as follows

<div id="container"></div>

$('select.product_dimension').change(function () {
  var a = "a";
  var b = "b";
  // This will 
  $("#container").load("<?php echo base_url(); ?>home/list_products_of_company",
            {a : a, b : b});       
});