【问题标题】:How to load a view from controller in Codeigniter when the controller is called from an AJAX POST request?从 AJAX POST 请求调用控制器时,如何从 Codeigniter 中的控制器加载视图?
【发布时间】:2015-06-19 06:02:23
【问题描述】:

我有一个 view,它有一个 AJAX POST 到 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
            }       
 )
});

控制器

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);
}

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

编辑:

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

【问题讨论】:

  • 按原样加载视图并从 AJAX 获取数据。这就是我们所说的优化

标签: php jquery ajax codeigniter


【解决方案1】:

如果你想从你的 codeigniter 控制器加载视图,不要在这里使用 AJAX,我建议你像这样修改你的 HTML:

<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>

你的 jquery 代码是这样的,这样你就可以在选择框更改时直接提交表单,并且操作会转到 CI 控制器:

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

还有你的 CI 主控制器:

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);
}

【讨论】:

  • @arshad 感谢您接受我的回答,我希望您的问题现在已经解决,如果您有任何疑问,请联系我,宣传我的堆栈溢出聊天室。
  • 感谢您的帮助。你迟到了,但这是我的问题的解决方案。
【解决方案2】:
$('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);
      }
  });
});

我认为这会有所帮助

【讨论】:

    【解决方案3】:

    您需要根据响应更新您的 html。例如,您想在div 中设置响应集,ID 为container。你可以这样做

    &lt;div id="container"&gt;&lt;/div&gt;

    $('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});       
    });
    

    【讨论】:

    • 我想要一个页面重定向,就像我们在 CI 中所做的那样。这可能吗?
    • 你可以在javascript中使用window.location = "http://yoururl.com"进行页面重定向
    • 那个“url”是问题...如果我用window.location加载url,数据将不会被添加到页面中...
    • 我认为您的问题是页面流或加载数据的方式。我不清楚你的整个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2011-06-29
    • 2011-10-25
    • 2012-04-16
    相关资源
    最近更新 更多