Jquery Can';在Codeigniter中似乎没有返回JSON

Jquery Can';在Codeigniter中似乎没有返回JSON,jquery,ajax,codeigniter,Jquery,Ajax,Codeigniter,在库中单个项目上的悬停事件中,我想用AJAX调用的结果填充一个信息窗口。我是CI的新手,我似乎不明白为什么我不能做到这一点。我查过其他帖子。。没有爱 有人能指出我的错误吗 下面是我的javascript函数在悬停时启动 function showDataWindow(){ $.post('index.php/home/getMoreInfo', { ID: thisID}, function(data) { var moreInfo = $.pa

在库中单个项目上的悬停事件中,我想用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);
}
这是我的艺术家模型

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(内部服务器错误)。顺便说一句,我已经加载了我的数据库库

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


什么地方不对?

您是否在CI中启用了错误报告功能?这应该告诉你出了什么问题

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


或者-如果您使用的是GZIP压缩,那么如果您自己尝试回显,就会出现问题。CodeIgniter使用与gzip输出兼容的代码-echo将断开页面并获取500个错误。

您是否在CI中打开了错误报告?这应该告诉你出了什么问题

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


或者-如果您使用的是GZIP压缩,那么如果您自己尝试回显,就会出现问题。CodeIgniter使用的是与gzip输出兼容的,echo会破坏页面并给您带来500个错误。

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

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

在控制器中:

$data['json'] = json_encode($assocReturned);
$this->load->view('json', $data);
视图/json.php
(或您创建的任何视图)中:


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

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

在控制器中:

$data['json'] = json_encode($assocReturned);
$this->load->view('json', $data);
视图/json.php
(或您创建的任何视图)中:


results()不是codeigniter数据库类中的函数。然而,这可能不是您问题的解决方案。您应该在此处查看使用codeigniter生成查询结果的页面:。如果您正在查找result(),您也没有正确使用它。我建议您模拟数据库类页面上的示例以获得正确的语法。使用
result()
更改
result()
,然后查看它的运行情况。此外,如果您希望每个列值位于数组中,则应使用
result\u array()
,如果您希望它们位于对象中,则应使用
result()
,但应像
$r->UID
$r->UFname
@Vlakarados-Hmm那样引用它们。。我刚刚更改了result(),但仍然得到一个500错误。如果我在下一步中传递要进行JSON编码的数据,我将在最后引用相同的值,对吗?我使用数组还是result_数组有关系吗?@K.K.Smith您现在尝试生成结果的方式您将希望使用result_数组(),因为result()生成的是对象而不是数组。让我们知道,如果这改变了你什么。问题解决了。你们都是对的。。我使用了-after correction-result(),它给了我一个对象(像$obj->property一样访问),但我试图像数组一样访问它($array[key])。我去拿一件东西。塔克斯!results()不是codeigniter数据库类中的函数。然而,这可能不是您问题的解决方案。您应该在此处查看使用codeigniter生成查询结果的页面:。如果您正在查找result(),您也没有正确使用它。我建议您模拟数据库类页面上的示例以获得正确的语法。使用
result()
更改
result()
,然后查看它的运行情况。此外,如果您希望每个列值位于数组中,则应使用
result\u array()
,如果您希望它们位于对象中,则应使用
result()
,但应像
$r->UID
$r->UFname
@Vlakarados-Hmm那样引用它们。。我刚刚更改了result(),但仍然得到一个500错误。如果我在下一步中传递要进行JSON编码的数据,我将在最后引用相同的值,对吗?我使用数组还是result_数组有关系吗?@K.K.Smith您现在尝试生成结果的方式您将希望使用result_数组(),因为result()生成的是对象而不是数组。让我们知道,如果这改变了你什么。问题解决了。你们都是对的。。我使用了-after correction-result(),它给了我一个对象(像$obj->property一样访问),但我试图像数组一样访问它($array[key])。我去拿一件东西。塔克斯!我会为将来可能遇到的有用的障碍献上一些爱心。但这不是我的问题。我想我只是在学习如何通过MVC系统进行故障排除。但是你的提示让我很困惑,因为我没有重新加载视图。。我只是想把控制器中的数据返回到AJAX调用中。我不明白吗?加载视图并不意味着额外的http请求,也不意味着重新加载。加载视图只意味着告诉CI在何处/如何输出数据。无论出于何种目的,它都与直接从控制器输出相同,但由于CI的输出类的工作方式,如果启用了GZIP压缩(在CI中),那么您所做的事情就必须这样做。感谢您的澄清