0

我向服务器发送和 ajax 请求,我想接收 json 响应,但我收到 html 响应,这段代码有什么问题?

//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);”之后的任何代码 不起作用,例如。警报(“嗨”);!

4

3 回答 3

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));
}
于 2012-12-04T02:22:25.160 回答
0

您的模型中似乎有一些错误,您得到的 HTML 响应是 CI 错误消息。

只是为了调试,在没有 json_encode 的情况下回显 $data,然后通过 URL 直接调用该函数。

于 2012-12-04T10:01:54.467 回答
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!'));
 }
于 2012-12-04T12:18:02.137 回答