我发送和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);”之后的任何代码不起作用,例如警报( “你好”); !
答案 0 :(得分: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));
}
答案 1 :(得分:0)
您的模型中似乎存在错误,您获得的HTML响应是CI错误消息。
只是为了调试,在没有json_encode的情况下回显$ data,然后通过URL直接调用该函数。
答案 2 :(得分: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!'));
}