使用codeigniter的jquery ajax调用
我对ajax调用有问题。 这是我的密码:使用codeigniter的jquery ajax调用,codeigniter,jquery,Codeigniter,Jquery,我对ajax调用有问题。 这是我的密码: $.ajax({ url : "my_controller/jsonSubcategories/"+$(this).attr('id')+"", type:'POST', dataType: 'json', success:function( data ) { }) }, er
$.ajax({
url : "my_controller/jsonSubcategories/"+$(this).attr('id')+"",
type:'POST',
dataType: 'json',
success:function( data ) {
})
},
error:function( result ){ console.log(["error", result]) }
});
和我的控制器代码:
public function jsonSubcategories($idParent){
header('Content-type: application/json');
echo json_encode($this->Term->get_terms_byParent('subcategory',$idParent));
}
电话给我错了
例如,如果我手动转到我的_controller/jsonSubCategories/5,它不仅会显示json编码的对象,还会显示布局的一部分。
问题是由布局引起的?在这种情况下,是否可以排除ajax调用的布局挂钩 我不太确定“hooks-yield-layout”是什么时候,但是,是的,对于ajax请求,很容易将其排除在外 只需在请求URL后放置一个
GET
参数,如format=json
:
$.ajax({
url : "my_controller/jsonSubcategories/"+$(this).attr('id')+"?format=json",
在您的hooks
文件中,在正在执行的函数开头的某个地方添加以下内容:
if ($_GET['format'] === 'json') return;
这基本上可以解决问题
通过
GET
参数指定输出格式是控制不同输出的常用方法。当然。我还没有测试以下代码,但我认为它应该可以工作
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,直到所有缓冲区堆栈都被弹出为空。如果使用
die(json_encode(…))代码>而不是?