OOP MVC - 检查返回数据类型的模型或控制器?

时间:2011-01-16 20:13:54

标签: php ajax oop json model-view-controller

有时我需要像数组一样的数据,有时我需要与json相同的数据。

你在哪里检查是否是ajax调用,在控制器或模型中还是......哪一个更好?

测试是否是控制器中的ajax调用

function my_controller(){
    //getdata from model
    $data=$this->my_model();
    if(THIS_IS_AJAX_CALL){
        echo json_encode($data);
    }else{
        return $data;
    }
}

function my_model(){
    //get the data from db
    return $data;
}

将类型作为参数传递给模型:

function my_controller(){
    if(THIS_IS_AJAX_CALL){
        return $this->my_model('json');
    }else{
        return $this->my_model();
    }
}

function my_model($type=''){
    //get the data from db
    if($type='json'){
        return json_encode($data);
    }else{
        return $data;
    }
}

2 个答案:

答案 0 :(得分:1)

控制器。该模型并不关心如何将数据表示给用户,而只关心数据本身。

答案 1 :(得分:1)

来自Codeigniter tutorial explaining MVC

的引用
  • 模型代表您的数据结构。通常,模型类将包含帮助您检索,插入和更新数据库中信息的函数。

  • 视图是呈现给用户的信息。视图通常是一个网页,但在CodeIgniter中,视图也可以是页眉片段,如页眉或页脚。它也可以是RSS页面,或任何其他类型的“页面”。

  • Controller充当模型,视图和处理HTTP请求并生成网页所需的任何其他资源之间的中介。

我认为您应该检查控制器(这与数据结构无关)标头,以查看它是否是ajax调用,因为jquery sets headers。如果是Ajax调用,则应执行所需的json_encode转换。我认为您的代码应该与下面的代码一致:

function is_xhr() {
  return @ $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] === 'XMLHttpRequest';
}

$data = /* get from model */
if( is_xhr() ){
  // Not explicitly needed, but we like being accurate, right?:
  header('Content-type: application/json');

  echo json_encode($data);
  exit(); // We don't need to render anything else
} else {
  echo $data;
}