2012-12-04 40 views
0

我發送和ajax請求到服務器,我想接收json響應,但是我收到html響應,這段代碼中有什麼錯誤?CodIgniter:爲什麼我發送ajax請求時得到html響應而不是json響應

//jquery code 

$('select[name=category]').click(function(){ 
    $.ajax({ 
    url: "/index.php/category/get_categories", 
    type: "post", 
    dataType: "json", 
    cache: false,  
    success: function (result) { 
     var arr = jquery.parseJSON(result); 
     alert(arr); 
     }  
    }); 
}); 

//php code 

public function get_categories(){ 
    $data = $this->category_model->get_cats_names_ids(); 
    echo json_encode($data); 
} 

響應是一個html頁面而不是json對象,並且警告框不會出現。 當我刪除dataType:「json」時,警告框出現幷包含html頁面! 以及「var arr = jquery.parseJSON(result);」之後的任何代碼不起作用,例如。警報( 「你好」); !

+0

什麼html頁面包含哪些內容? – ekims

+1

嘗試使用絕對網址。 – itachi

+0

@ekims:html頁面是WAMPSERVER主頁! – sahar

回答

3

我不知道這是否會完全解決您的問題(可能是一個顯示鉤子或其他視圖機制涉及哪些產生HTML),但從這裏開始。規則1:永遠不要回應你的控制器中的任何東西。請調用視圖或使用output::set_output

規則2:始終正確設置您的內容類型。

public function get_categories(){ 
    $data = $this->category_model->get_cats_names_ids(); 
    $this->output->set_header('Content-type:application/json'); 
    $this->output->set_output(json_encode($data)); 
} 
+0

我試過這段代碼,但是響應仍然是一個html頁面「WAMPSERVER Homepage」。 並且在模型中沒有錯誤,我通過url調用函數並簡單地回顯數據! – sahar

0

您的模型似乎有錯誤,並且您收到的HTML響應是CI錯誤消息。

僅用於調試,在不使用json_encode的情況下回顯$ data,然後直接通過URL調用該函數。

0

嘗試以下

$('select[name=category]').click(function() 
{ 
$.post('<?php echo site_url('category/get_categories'); ?>', { 'var': 1 }, 
     function(response) { 
     if(response.success) 
    { 
     var arr = response.message; 
        alert(arr); 
    }  
     },"json"); 


}); 

public function get_categories() 
{ 
    $data = $this->category_model->get_cats_names_ids(); 
    echo json_encode(array('success'=>true,'message'=>$data)); 
    //for testing replace above line with 
    // echo json_encode(array('success'=>true,'message'=>'Hello!')); 
} 
+0

它也一樣! – sahar

相關問題