Jquery Can';在Codeigniter中似乎没有返回JSON
在库中单个项目上的悬停事件中,我想用AJAX调用的结果填充一个信息窗口。我是CI的新手,我似乎不明白为什么我不能做到这一点。我查过其他帖子。。没有爱 有人能指出我的错误吗 下面是我的javascript函数在悬停时启动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
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中),那么您所做的事情就必须这样做。感谢您的澄清