我有一个包含动态组件的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);
}
答案 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
- 前缀方法。