我遇到了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调用的布局挂钩?
答案 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直到所有缓冲区堆栈都弹出为空。