0

我对 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调用的布局挂钩吗?

4

2 回答 2

0

我不确定“钩子产量布局”何时是,但是,很容易将它排除在您的 ajax 请求中。

只需在您的请求 URL 之后添加一个GET参数即可:format=json

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

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

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

这应该几乎可以解决问题。

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

于 2013-10-23T16:49:52.773 回答
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 直到所有缓冲区堆栈都弹出空。

于 2013-10-23T16:57:18.263 回答