在库中单个项目上的悬停事件中,我想使用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。
我不对的是什么?
答案 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错误。