我一直在研究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(),但似乎没有一个适用于我的特定情况......
感谢您的帮助!
答案 0 :(得分:3)
如果您的数据只是一个数组,那么您的代码就可以运行。但是,您的数据数组包含在results
中,它是对象的属性。
将each
更改为:
$.each(data.results, function(index,item){...
或者只是发送数组而不将其放入php results
数组
$data = $this->site_model->getInfo();