MVC ajax调用 - 在哪里处理它们?

joh*_*ack 5 php ajax model-view-controller

我有一个我正在构建的自动MVC框架,到目前为止已经设法避免了任何AJAX调用的需要.但是,现在,我想创建一个实时更新Feed.

我的问题是,ajax调用的处理程序通常存储在MVC中?我应该将它们存储在与拨打电话有关的同一个控制器中吗?

例如,如果我的域名www.example.com/browse/blogs(浏览是控制器,博客就是方法)正在为更新的博客列表进行AJAX调用,那么电话会仅限于www.example.com/ browse/update_list还是什么?

或者,它是一个单独的AJAX控制器?www.example.com/ajax/update_blogs

你怎么做呢?

Cor*_*lou 8

最佳做法是完全忽略这是一个AJAX请求这一事实,并且只关注您的AJAX请求与哪个控制器相关.如果你有一个全能的AJAX控制器你可能会把苹果分组到梨,可以这么说.

主要区别在于,对于AJAX请求,您可能需要避免设置任何布局(以及更多可能的视图)数据.这可以通过在父Controller类中检查有效的AJAX请求的方法来轻松解决:

protected function isAjax()
{
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
            $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
}
Run Code Online (Sandbox Code Playgroud)


Pas*_*TIN 2

我想说 Ajax 请求与非 Ajax 请求完全相同:实际上,从 HTTP 协议的角度来看,它的工作方式完全相同。

唯一的区别是您返回一些非格式化数据,如 JSON 或 XML (嘿,这与生成 ATOM feed ^^ 相同),或者仅返回 HTML 页面的一部分。

因此,我会将它们视为任何其他“正常”HTTP 请求,并按照处理非 Ajax 请求的方式放置它们。


一种半替代的想法可能是在您的控制器中只有一个操作:/browse/blogs- 并始终调用该操作。

但是,它会检测是否通过 Ajax 请求,并且会:

  • 如果通过“正常”请求调用,则返回整页
  • 或者如果通过 Ajax 请求调用,则仅返回一些数据(或页面的一部分)

注意:这不是一个“疯狂”的想法;例如,Zend Framework 提供了一些东西来促进这一点(参见12.8.4.3. ContextSwitch 和 AjaxContext