2013-10-23 95 views
0

我有一個問題,與ajax調用。 這裏是我的代碼:jquery ajax調用codeigniter

$.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

如果使用'die(json_encode(...));'會發生什麼? –

回答

0

我不確定什麼時候「hooks yield layout」,但是,很容易排除你的ajax請求。

只要把GET參數如format=json您要求的網址後:

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

而在你hooks文件,在正在執行的函數開始的地方,添加以下內容:

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

這應該可以解決這個問題。

通過參數GET指定輸出格式是控制不同輸出的常用方法。

0

當然。我沒有測試過下面的代碼,但我認爲它應該可以工作。

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

基本上任何迄今已echo'ed,如果輸出緩衝沒有在php.ini中禁用,存儲在緩衝區,這個緩衝區是由ob_get_clean呼叫即可清除,你可以放心,在json內容之前沒有內容會被回顯。另外需要檢查的是你的鉤子是否再次調用ob_start,因爲這意味着你將不得不ob_get_clean,直到所有的緩衝區堆棧都被清空。