CodeIgniter Ajax响应包含数据但输出未定义

时间:2013-01-04 02:22:17

标签: php jquery ajax codeigniter

我一直在研究CodeIgniter项目,并且遇到了使用ajax从我的控制器返回数据的问题。

控制器:

function outputAjax()
    {
        $this->load->model('my_model');
        $data['results'] = $this->site_model->getInfo();
        $this->output->set_output(json_encode($data));
    }

型号:

function getInfo()
{
    $this->db->order_by('PubDate','DESC');
    $query = $this->db->get('Articles', 50);

        return $query->result();
}

视图中的Ajax功能:

<div id="article-area">
    <p>Hey this is where the ajax call should output!</p>

</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" language="Javascript">
 jQuery(document).ready(function(){     
      $.ajax({
url: 'http://localhost/project/index.php/my_controller/outputAjax',
dataType:'json',
success: function(data) {
    $.each(data, function(index,item){
        $("#article-area").append('<div><b>' + item.id + '</b></div><hr />');

    });
}
      });

});

我可以使用PHP foreach循环输出数据,但现在我正在尝试将其转换为使用ajax。如果我是正确的,输出的数据是对象数组。 每个“对象”包含6个左右的数据字段,例如: id,title,url,PubDate,Source。

我很擅长使用ajax,但在尝试调试问题时,使用Chrome检查并检查“网络”我可以看到ajax调用并在响应标签中:我需要的所有数据都显示在这里这样:

{"results":[{"id":"1","Source":"My Source","Title":"My Title". . . .

由于数据显示在响应中,但页面上没有显示任何内容,或者如果我更改了ajax调用,我可以将其输出到UNDEFINED。

我希望实现的最终结果是在页面上大约有10个div,其中包含来自ajax调用的数据。这也提出了我的问题......

我的模型从db返回50行数据。我目前正以json格式将所有内容传递给ajax函数。我最初只会使用10行数据,然后在该页面上的确定时间内使用其余行。最好是继续最初输出所有50行到ajax调用,然后根据需要使用它,或者将数据限制为最初从模型中使用的数据?

我已经使用CI浏览了一些ajax教程,但是他们都在使用POST,我还没有找到一个在document.ready上运行而没有用户交互的教程。我还注意到必须有几种输出数据的方法。我已经看到以这种方式使用.append()。after()和.value(),但似乎没有一个适用于我的特定情况......

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

如果您的数据只是一个数组,那么您的代码就可以运行。但是,您的数据数组包含在results中,它是对象的属性。

each更改为:

$.each(data.results, function(index,item){...

或者只是发送数组而不将其放入php results数组

$data = $this->site_model->getInfo();