新手:CodeIgniter,JQuery& Ajax - 不返回/显示值

时间:2011-06-08 17:46:49

标签: jquery ajax codeigniter

我正在尝试按照此处的教程进行操作:http://www.ifadey.com/2010/06/crud-using-jquery-and-codeigniter/我的代码已更新,以适应CI和JQ更新。但是当尝试从我的数据库加载数据并在我的视图中显示它时,没有任何反应/显示。所有javascript(JQ)代码链接都可以正常工作,所有内容都使用MAMP在本地运行。非常感谢任何和所有帮助。

我的代码如下,

型号:

<?php
class mUsers extends CI_Model { 
    public function getAll() {

        //get all records from users table
         $this->db->_compile_select();  
        $query=$this->db->get('users')->result();        
        //OR $query = $this->db->get('users');
        echo $this->db->last_query();

        if( $query->num_rows() > 0 ) {
            return $query->result();
        } else {
            return array();
        }

    } //end getAll

} //end class
?>

控制器:

<?php
class Site extends CI_Controller{
   public function index(){
       $this->load->model('mUsers');       
       $this->load->view('home');
   }

 public function read(){
     header('Content-Type: application/json',true); 
     echo json_encode($this->mUsers->getAll());

 }

}

?>

查看:

<html>
<head>
    <title>Test</title>

        <base href="<?php echo base_url(); ?>" />
        <link type="text/css" rel="stylesheet" href="css/styles.css" />
        <link type="text/css" rel="stylesheet" href="css/ui-lightness/jquery-ui-1.8.12.custom.css" />


</head>
<body>


    <div id="tabs">

    <ul>
        <li><a href="#read">Read</a></li>
        <li><a href="#create">Create</a></li>
    </ul>

    <div id="read">
        <table id="records"></table>
    </div>

    <div id="create">Create form goes here...</div>

</div> <!-- end tabs -->

<script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.13.custom.min.js"></script>
<script type="text/javascript" src="js/jquery.tmpl.js"></script>

<script type="text/template" id="readTemplate">
        <tr>
            <td>${id}</td>
            <td>${name}</td>
            <td>${email}</td>
        </tr>
    </script>


<script type="text/javascript" src="js/all.js"></script>

</body>
</html>

3 个答案:

答案 0 :(得分:0)

我假设您没有自动加载mUsers模型,因此Site-&gt; read()方法不会从数据库输出任何数据,因为它不知道模型的getAll()方法。

您应该在需要它的每个方法中加载模型,或者更确切地说在构造函数中加载模型,因为站点控制器的大多数方法都可能使用它:

class Site extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->model('mUsers');
    }

    function index()
    {
        $this->load->view('home');
    }

    function read()
    {
        header('Content-Type: application/json',true); 
        echo json_encode($this->mUsers->getAll());
    }
}

答案 1 :(得分:0)

有一个关于nettuts模板的优秀教程。

尝试将模板脚本更改为此

<script id="readTemplates" type="text/x-jquery-tmpl">

我不是真的在模板上,但你不需要定义$ Id $ name $ email?这是我的一个模板从twitter获取内容的示例。此信息可以从萤火虫收到

 <script id="tweets" type="text/x-jquery-tmpl">
     <li class="display">
        <img src="${imgSource}" alt="${userName}" />
        <h4> ${username} </h4>
        <p> ${tweet} </p>
        <hr />

     </li>
  </script>

  <ul id="twitters"></ul>
  <script type="text/javascript">
     $.ajax({
        type : 'GET',
        dataType : 'jsonp',
        url : 'http://search.twitter.com/search.json?q=my id',

        success : function(tweets) {   

           var twitter = $.map(tweets.results, function(obj, index) {
              return {
                 username : obj.from_user,
                 tweet : obj.text,
                 imgSource : obj.profile_image_url,
                 geo : obj.geo
              };
           });

           $('#tweets').tmpl(twitter).appendTo('#twitters');
        }
  });

  </script>  

请注意,我使用的返回值是在脚本底部定义的。这可能无法解决您的问题,但可以让您更好地了解模板是如何工作的

答案 2 :(得分:0)

终于明白了。 Ajax调用应该包含.tmpl,而不是.render:

$.ajax({
        url: 'index.php/site/read',
        dataType: 'json',
        success: function( response ) {
             $( '#readTemplate' ).tmpl( response ).appendTo( "#records" );