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
你怎么做呢?
最佳做法是完全忽略这是一个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)
我想说 Ajax 请求与非 Ajax 请求完全相同:实际上,从 HTTP 协议的角度来看,它的工作方式完全相同。
唯一的区别是您返回一些非格式化数据,如 JSON 或 XML (嘿,这与生成 ATOM feed ^^ 相同),或者仅返回 HTML 页面的一部分。
因此,我会将它们视为任何其他“正常”HTTP 请求,并按照处理非 Ajax 请求的方式放置它们。
一种半替代的想法可能是在您的控制器中只有一个操作:/browse/blogs- 并始终调用该操作。
但是,它会检测是否通过 Ajax 请求,并且会:
注意:这不是一个“疯狂”的想法;例如,Zend Framework 提供了一些东西来促进这一点(参见12.8.4.3. ContextSwitch 和 AjaxContext)
| 归档时间: |
|
| 查看次数: |
2924 次 |
| 最近记录: |