0

在库中单个项目上的悬停事件中,我想用 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(内部服务器错误)。顺便说一句,我已经加载了我的数据库库。

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

我做错了什么?

4

2 回答 2

4

我要感谢 Zathrus 指出 GZIP 压缩是原因。

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

在您的控制器中:

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

views/json.php(或您提出的任何观点):

<?php echo $json;

我知道您已经解决了您的问题并且它与 GZIP 压缩无关,但是如果您最终优化您的站点并在 CI 中启用它,如果您保持代码原样,您将遇到这个问题。

于 2012-09-19T20:59:10.343 回答
2

您是否在 CI 中打开了错误报告?那应该告诉你什么是错的。

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

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

于 2012-09-19T20:31:14.710 回答