加载通过AJAX的文件使用CodeIgniter / MVC(Loading files via A

2019-10-18 08:02发布

我目前在重写整个过程现场矿井,使其与CI兼容。 我与CI和一般的MVC模式相当新。 我跟着这个教程 ,并取得了MVC模式的视图部分一个相当不错的模板。 问题是,有很多我的网站使用jQuery的/ AJAX,使其更具活力。 例如,在我所有的我的网站上的网页,我有一个使用jQuery来加载在KEYUP一个PHP文件的输入字段。

<script type="text/javascript">
    $("#search_bar").keyup(function(){
        var search = $("#search_bar").val();
        var url = "search_bar.php";
        var data = "q="+ search;

        $('#livesearch').load(url, data);
        $("#livesearch").slideDown("fast");
    });
</script>

<input type='text' maxlength='30' id='search_bar' autocomplete='off' placeholder='Browse Teams' />
<div id='livesearch' style='display:none;'></div>

所有这一切需要加载的结果后端工作在通过jQuery(search_bar.php)加载PHP文件发生。 所以,应该“search_bar”将自己的观点,即通过真实自己的控制器触发,然后通过一个名为“search_bar”模式模拟? 同样,我很新的MVC模式,并不太清楚如何正确使用,如Cl一个面向对象的框架整合AJAX。

谢谢

Answer 1:

直接调用视图中的ajax请求不是一个好的做法调用哪个加载视图控制器,或者直接做的东西,在控制器的功能

<script type='text/javascript'>
    $('#search_bar').keyup(function(){
        $.ajax({
                url: 'yourcontrollername/search_bar_yourfunction',
                type:'POST',
                data: {q: search,
                success: function(result){
                 $("#livesearch").html(result);
                 $("#livesearch").slideDown("fast");
                    } 
                }); 
    });
    </script>

控制器代码

 class yourcontrollername extends My_Controller {
public function search_bar_yourfunction() {
      //do your stuff and store in the $data[] array

$this->load->view("search_bar",$data); //search_bar.php
die();
        }
    }
    }


Answer 2:

你应该从你查看到控制器去:

<script type='text/javascript' language='javascript'>
    $('#search_bar').keyup(function(){
        $.ajax({
                url: 'search_bar.php',
                type:'GET',
                data: {q: search,
                success: function(result){
                        //Insert code here
                    } // End of success function of ajax form
                }); // End of ajax call
    });
    </script>

然后在你的控制器,加载一个模型,如果需要的话:

public function weigeren() {
        $user = $this->CI->authex->getUserInfo();
        $data['title'] = "Test";
        $this->load->model('search_model');
        $query = $this->input->get('q');
        if (isset($user)) {

          echo $this->search_model->search($query);


        }
    }


Answer 3:

我发现在笨3。实施例加载AJAX(jquery的)的一种方式,

文件夹的结构:

  1. 控制器/ upload.php的
  2. 视图/管理/ ajax_view / ajax_images.php

控制器/上传:

public function process()
{
    $data['my_picture'] = array(
        'pic_id' => '1', 
        'pic_path' => 'http://example.com/images', 
        );

    $this->load->view('admin/ajax_view/ajax_images', $data);
}

视图/管理/ ajax_view / ajax_images:

<?php foreach($my_picture as $key => $row): ?>
<td><?php echo $my_picture['pic_path']; ?></td>
<?php endforeach; ?>

视图/管理/ form_upload:

<tbody>
  <tr class="trbody">
    <th scope="row">1</th>
    <!-- <td></td> --> <!--comments this because appends element jquery-->
  </tr>
 </tbody>

<script type="text/javascript">
 $(document).ready(function(){
  $('#my_button').click(function(e){
   e.preventDefault;
    $.ajax({
      url: 'upload/process',
      dataType: 'text',
      type: 'post',
      success: function(data){
      $('.trbody')
      .append(
        '<td>'+ data + '</td>'
        );
      },
      error: function(errorThrown){
        console.log(errorThrown);
      }
    });
  });
});
</script>

要这样,我隔整个视页面和负载阿贾克斯视图时,事件触发的AJAX的。



文章来源: Loading files via AJAX with CodeIgniter/MVC