似乎无法在Codeigniter中返回JSON

时间:2012-09-19 20:01:55

标签: jquery ajax codeigniter

在库中单个项目上的悬停事件中,我想使用AJAX调用的结果填充信息窗口。我是CI的新手,我似乎无法弄清楚为什么我无法做到这一点。我查过了其他帖子..没有爱。

有人能指出我的错误吗?

这是我在悬停时触发的javascript函数

function showDataWindow(){
    $.post('index.php/home/getMoreInfo', { ID: thisID},
        function(data) {
             var moreInfo = $.parseJSON(data);
             alert(data); // just checking
             .. build my HTML with results and fade in ..
});};

以下是我的控制器中的相关方法

public function getMoreInfo()
{
    $answer = "unsigned";
    $ID = $_POST['ID'];
    $this->load->model('Artist_model');
    $assocReturned = $this->Artist_model->get_more_info($ID);
    echo json_encode($assocReturned);
}

这是我的Artist_model

public function get_more_info($ID)
{
    $query = $this->db->query("SELECT * FROM NOIRusers WHERE UID=$ID");
    $assoc = array();

    foreach($query->results() as $r) // there should be only one result .. do this different?
    {   
        $assoc['memberID'] =$r['UID'];
        $assoc['firstName'] =$r['UFname'];
        $assoc['lastName'] =$r['ULname'];
        .... a lot more like this ...
    }
    return $assoc;
}

我一直收到500(内部服务器错误)。我已经加载了数据库库btw。

我认为问题在于我如何处理数据库响应。据我所知.. $ this-> db-> query()给了我一个数据库对象,然后我通过foreach迭代到一个关联数组。我将该数组返回给我的控制器,然后json_encodes它并将其回传给javascript。

我不对的是什么?

2 个答案:

答案 0 :(得分:4)

我会赞扬Zathrus指出GZIP压缩是原因。

在CodeIgniter中,无法直接从启用了GZIP压缩的控制器输出。原因是输出类被中断。要避免此问题,请执行以下操作:

在您的控制器中:

$data['json'] = json_encode($assocReturned);
$this->load->view('json', $data);

views/json.php(或您制作的任何视图)中:

<?php echo $json;

我意识到您已经解决了您的问题并且它与GZIP压缩无关,但是如果您最终优化您的网站并在CI中启用它,如果您保持代码的方式,则会遇到此问题

答案 1 :(得分:2)

您是否在CI中启用了错误报告?那应该告诉你没错。

它也可能是一个错误的.htaccess文件。

或者 - 如果您正在使用GZIP压缩,如果您尝试自己回应问题,则会导致问题。 CodeIgniter使用与其gzip输出兼容的views - echo将破坏页面并获取500错误。