1

我一直在从事 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();
}

View 中的 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 调用的数据。这也提出了我的附带问题......

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

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

谢谢您的帮助!

4

1 回答 1

3

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

更改each为:

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

或者只是发送数组而不将其放入 phpresults数组中

$data = $this->site_model->getInfo();
于 2013-01-04T02:32:18.293 回答