AJAX调用MVC结构PHP

时间:2016-07-10 20:18:32

标签: php ajax model-view-controller

我有一个包含动态组件的AJAX特色页面。我想知道如何处理MVC中的ajax调用。

我的第一个想法是为ajax调用创建一个新的控制器而不渲染视图,并检查路由是否有像这样的ajax请求

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  call_user_func_array(array("ajax", $this->url_action), null);
}

1 个答案:

答案 0 :(得分:1)

我会让AJAX处理代码的位置取决于它的上下文。如果它正在处理与返回完整视图的另一个控制器相同类型的内容,只需在该控制器中创建一个“ajax方法”,例如响应JSON标头,您要发送到浏览器的内容并退出。不需要专用的AJAX控制器,就像你没有单独的GET控制器或POST控制器一样。

编辑:(示例)

class BookController
{
   public function getBookDetail($id)
   {
       // Go fetch a book from the DB.
       // Assemble your full fledged view
       // Send it to the browser
   }

   public function ajaxBookDetail($id)
   {
       // Go fetch a book from the DB.
       header('Content-Type: application/json');
       echo json_encode($someBookData);
       exit;
   }
}

如果您在SERVER标头中检测到ajax,则可以告诉路由器使用get - 前缀方法而不是xmlhttprequest - 前缀方法。