【问题标题】:CodeIgniter Ajax response contains data but output is undefinedCodeIgniter Ajax 响应包含数据但输出未定义
【发布时间】:2013-01-04 02:22:16
【问题描述】:

我一直在从事 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() ,但似乎都不适用于我的特殊情况......

感谢您的帮助!

【问题讨论】:

    标签: php jquery ajax codeigniter


    【解决方案1】:

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

    each 更改为:

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

    或者直接发送数组而不放入phpresults数组

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

    【讨论】:

    • 谢谢!修复了我遇到的问题。你对我问题的后半部分有什么意见吗?另外,由于这两种方式都可以正常工作,他们有什么理由让我想要返回对象而不仅仅是数组?由于我遵循了几个不同的教程来达到我现在的位置,我不确定我为什么决定最初将它放入一个对象中。再次感谢!
    • 限制行问题有点主观。如果一次发送所有数据,您可以缓存在变量中接收到的数据,或者对更多行提出新请求。就服务器负载而言……首先更好……就编码而言……做对你来说更容易的事情
    • 再次感谢您的帮助和意见!
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2014-04-09
    相关资源
    最近更新 更多