用codeigniter调用jquery ajax

时间:2013-10-23 16:41:36

标签: codeigniter jquery

我遇到了ajax调用的问题。 这是我的代码:

$.ajax({ 
            url : "my_controller/jsonSubcategories/"+$(this).attr('id')+"",
            type:'POST',
            dataType: 'json',
            success:function( data ) {

                })
            },
            error:function( result ){ console.log(["error", result]) }
        });

和my_controller代码:

public function jsonSubcategories($idParent){
    header('Content-type: application/json');
    echo json_encode($this->Term->get_terms_byParent('subcategory',$idParent));

}

电话给我错误!

如果我手动去例如my_controller / jsonSubCategories / 5它不会显示我只有json编码的对象,但也是我的钩子产生布局的一部分。 问题是由布局引起的?在这种情况下可以排除ajax调用的布局挂钩?

2 个答案:

答案 0 :(得分:0)

我不确定“挂钩屈服布局”是什么时候,但是,是的,很容易将其排除在你的ajax请求之外。

只需在请求网址后添加GET参数,例如format=json

$.ajax({ 
        url : "my_controller/jsonSubcategories/"+$(this).attr('id')+"?format=json",

在您的hooks文件中,在正在执行的函数开头的某处,添加以下内容:

if ($_GET['format'] === 'json') return;

这应该可以解决这个问题。

通过GET参数指定输出格式是控制不同输出的常用方法。

答案 1 :(得分:0)

不确定。我没有测试过以下代码,但我认为它应该可行。

public function jsonSubcategories($idParent){
    ob_get_clean();
    header('Content-type: application/json');
    echo json_encode($this->Term->get_terms_byParent('subcategory',$idParent));
}

基本上到目前为止已经回显的是,如果你的php.ini中没有禁用输出缓冲,则存储在缓冲区中,并且ob_get_clean调用清除此缓冲区,你可以放心,没有任何内容将被清除在你的json内容之前回应。要检查的其他方法是查看你的钩子是否再次调用ob_start,因为这意味着你必须ob_get_clean直到所有缓冲区堆栈都弹出为空。