2013-06-29 66 views
1

我目前正在重寫我的整個site,以便它與CI兼容。我對CI和MVC模式一般都很陌生。我遵循這tutorial,併爲MVC模式的視圖部分做了一個相當不錯的模板。事情是,我的很多網站使用jQuery/AJAX來使其更具動態性。例如,在我網站上的所有網頁上,我都有一個輸入字段,它使用jQuery在鍵入時加載PHP文件。使用CodeIgniter/MVC通過AJAX加載文件

<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」應該是它自己的View,它是由它自己的Controller觸發的,然後通過名爲「search_bar」的模型來建模?再一次,我對MVC模式非常陌生,我不太確定如何正確地將AJAX與面向對象的框架(如CI)相集成。

感謝

+0

不能理解的問題.... – sbaaaang

+0

你想實現嗎?你的代碼似乎沒問題,如果你需要Ajax的基礎知識,請嘗試使用Google搜索;) – sbaaaang

回答

0

直接呼叫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(); 
     } 
    } 
    } 
0

你應該從你的觀點到控制器:

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


     } 
    } 
0

我發現在笨3。實施例加載AJAX(jquery的)的一種方式,文件夾的

結構:

  1. 控制器/上傳。 php
  2. view/admin/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視圖,並在事件觸發時加載ajax視圖。